10位时间戳、13位时间戳、17位时间戳,以及在JavaScript中的格式转换

一、介绍

1、10位时间戳

2、13位时间戳

3、17位时间戳

4、时间戳转换工具

二、13位时间戳的转换

1、转标准日期

2、转格式化日期

三、10位时间戳的转换

1、转标准日期

2、转格式化日期

四、17位时间戳的转换

1、解析思路

2、解析过程

(1)统一单位

(2)差值计算

(3)截取时间

(4)转标准日期

(5)格式化日期

3、完整代码

4、新的问题 


一、介绍

1、10位时间戳

指的是Unix时间戳,它表示自1970年1月1日00:00:00 UTC(协调世界时) 以来的总秒数;

10位时间戳是一种常见的时间表示方式,因其简单、易用、兼容性好,在软件开发和网络应用中被广泛使用;

2、13位时间戳

指的是Unix时间戳,它表示自1970年1月1日00:00:00 UTC(协调世界时) 以来的总毫秒数;

13位时间戳是10位时间戳的扩展,将时间精度提高到了毫秒级,在需要高精度时间记录和分析的场景中尤为有用;

3、17位时间戳

它表示自1601年1月1日00:00:00 GMT(格林威治时间) 以来的总微秒数;

17位的时间戳并不常见,但在Chrome、Edge,Firefox等浏览器的本地数据库文件中,有关时间的字段都采用的是17位的时间戳;

4、时间戳转换工具

无论是哪种格式的时间戳,都是用来表示一个时间点,但都不利于阅读,因此需要将其转换为有利于阅读的标准日期格式;

时间戳转换工具(10、13位时间戳)

时间戳转换工具(17位时间戳)

二、13位时间戳的转换

1、转标准日期

  • 13位时间戳表示自1970年1月1日00:00:00的总毫秒数;
  • 使用JavaScript中的Date对象,可以将13位的时间戳转换为标准日期;
  • 只需在创建Date对象时传入需要转换的13位时间戳即可;
// 以 1719366631159 时间戳为例
new Date(1719366631159)

2、转格式化日期

使用该方法可以将13位的时间戳转换成 yyyy-MM-dd HH:mm:ss 格式的日期字符串;

// 13位时间戳的格式化,以1719366631059为例
console.log("格式化13位时间戳1719366631059:", formatTimeStamp(1719366631059));function formatTimeStamp(timeStamp) {let date = new Date(timeStamp);let year = date.getFullYear();let month = date.getMonth() + 1;let day = date.getDate();let hour = date.getHours();let minute = date.getMinutes();let second = date.getSeconds();month = month < 10 ? "0" + month : month;day = day < 10 ? "0" + day : day;hour = hour < 10 ? "0" + hour : hour;minute = minute < 10 ? "0" + minute : minute;second = second < 10 ? "0" + second : second;return `${year}-${month}-${day} ${hour}:${minute}:${second}`;;
}

三、10位时间戳的转换

1、转标准日期

  • 10位时间戳表示自1970年1月1日00:00:00的总秒数;
  • 只需给10位时间戳 * 1000 转成13位时间戳,其他按照13位时间戳的处理方式就可以了;
// 以 1719366631 时间戳为例
new Date(1719366631 * 1000);

 

2、转格式化日期

// 13位时间戳的格式化,以1719366631059为例
console.log("格式化13位时间戳1719366631059:", formatTimeStamp(1719366631059));// 10位时间戳的格式化,以1719366631为例
console.log("格式化10位时间戳1719366631:", formatTimeStamp(1719366631 * 1000));

注意:这里使用的是上面13位时间戳的转换方法,只需注意传入的参数即可; 

 

四、17位时间戳的转换

17位的时间戳在解析上就比较麻烦了,JavaScript中的Date对象只能用来处理13位的时间戳,所以只能将17位时间戳的换成13位时间戳的表示规则,再进行解析(哪位大佬有更好的办法,求赐教);

17位时间戳-在线转换工具

从上述网站可以直接对17位的时间戳进行转换,如下图所示:

 输入要转换的时间戳之后,Unix 时间戳(10位)、以及标准时间(GMT + 8:00)都能得到;

 接下来,以【13363929430000000】这个时间戳为例,进行解析;

1、解析思路

  • 将17位时间戳代表的微秒数转换为毫秒数(进制1000),记为:timeStamp14;
  • 计算1601年1月1日00:00:00的时间戳,记为:epoch_start;
  • 计算1970年1月1日00:00:00的时间戳,记为:epoch_end;
  • 计算差值 epoch_end - epoch_start, 记为epoch;
  • timeStamp14 - epoch,得到1970年1月1日00:00:00 以后的毫秒数, 记为ms;
  • 使用new Date(),创建日期传入ms,得到根据ms创建的日期对象,记为date;
  • 再使用13位时间戳的格式化方法,对date进行格式化后得到格式化后的日期格式;

2、解析过程

(1)统一单位

  • 17位时间戳表示总微秒数;
  • 13位时间戳表示总毫秒数;
  • 需要将17位时间戳 / 1000 转换成毫秒数(微秒与毫秒之间的进制为1000);
// 17位时间戳表示的总微秒数
let timeStamp17 = 13363929430000000;   // 转换之后的总毫秒数
let timeStamp14 = Math.floor(timeStamp / 1000);

(2)差值计算

  • 17位时间戳起始时间是1601年1月1日00:00:00(GMT) 以来的总微秒数
  • 13位时间戳起始时间是1970年1月1日00:00:00 (UTC) 以来的总毫秒数
  • 需要计算出1601年1月1日00:00:00 到 1970年1月1日00:00:00的总毫秒数;
// "1601-1-1 00:00:00"的毫秒数:-11644502743000
let epoch_start = new Date("1601-1-1 00:00:00:000").getTime();   // "1970-1-1 00:00:00"的毫秒数:-28800000 
let epoch_end = new Date("1970-1-1 00:00:00:000").getTime();   let epoch = (epoch_end - epoch_start);   // 相差 11644473943000 毫秒 

注意:这里的时间是差了8小时的;

可以直接使用"1601-1-1 08:00:00:000"和"1970-1-1 08:00:00:000",计算差值结果都是一样的;

(3)截取时间

截取17位时间戳从1970年1月1日00:00:00开始后的毫秒数;

let ms = timeStamp14 - epoch;   // 减去差值后:1719374657000

这时17位时间戳就已经变成了从1970年1月1日00:00:00开始后的毫秒数(13位时间戳); 

(4)转标准日期

将前面获取到的毫秒数进行转换;

let date = new Date(ms);     // Wed Jun 26 2024 14:02:12 GMT+0800 (中国标准时间)

(5)格式化日期

使用13位时间戳的格式化方法;

formatTimeStamp(date);   // 2024-06-27 10:31:27

3、完整代码

// 13363929430000000   1719455830   2024年6月27日星期四上午10点37分 GMT+08:00// 格式化17位时间戳13363929430000000: 2024-06-27 10:31:27
console.log("格式化17位时间戳13363929430000000:", format17TimeStamp(13363929430000000));    function format17TimeStamp(timeStamp){let epoch_start = new Date("1601-1-1 00:00:00:000");    console.log(epoch_start.getTime());   // "1601-1-1 00:00:00"的毫秒数:-11644502743000let epoch_end = new Date("1970-1-1 00:00:00:000");      console.log(epoch_end.getTime());   // "1970-1-1 00:00:00"的毫秒数:-28800000let epoch = (epoch_end.getTime() - epoch_start.getTime());      console.log(epoch);      // 相差epoch: 11644473943000 毫秒let timeStamp14 = Math.floor(timeStamp / 1000);     // timeStamp14: 13363929430000console.log("timeStamp14:", timeStamp14);let ms = timeStamp14 - epoch;   // ms: 1719455487000console.log("ms:", ms);let date = new Date(ms);        // date: Thu Jun 27 2024 10:31:27 GMT+0800 (中国标准时间)console.log("date:", date);return formatTimeStamp(date);   // 2024-06-27 10:31:27
}

4、新的问题 

很开心,终于解析出来了!!!

这就完了吗? 当我以为已经成功的时候,突然看到

人家的是37分,我的是31分,这不是原地裂开了!!!!心都碎了一地~~~~~~~~~

.......................................................................................................................................................

找问题:年、月、日、小时都没有问题,就差了5-6分钟,难道是精度损失,也没有啊,那这几分钟去哪了?

苦思冥想,头发掉了又掉,为啥呢?

直到我做出了一个大胆的尝试:

-------------------------------------------------------------------------------------------------------------------------------

使用13位的时间戳转换工具,输入0之后,跟预期结果一样,是它的起始时间:

1970-01-01 08:00:00】,

使用17位的时间戳转换工具,输入0之后,按道理应该是他的起始时间:

1601年1月1日星期一早上8点00分 GMT+08:00】,但它不是!!!!!!!!!!!!!!

显示 【GMT+08:05】,好像有那么点对上了,可能就是差在了这里!

可能是时区的问题,也可能是这个转换工具的问题。。。。。(希望不是我的问题!!)

当然,这个问题我也是不太确定,没有定论!

========================================================================

先记录到这里吧,希望哪位走过路过的大佬指点指点,到底是为什么呢?

又要一晚上睡不着了~~~~~~~~~~~~~~~~~~~~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++系统编程篇——Linux第一个小程序--进度条

&#xff08;1&#xff09;先引入一个概念&#xff1a;行缓冲区 \r和\n \r表示回车 \n表示回车并换行 ①代码一 #include<stdio.h> #include<unistd.h> int main()…

django学习入门系列之第三点《伪类简单了解》

文章目录 hover&#xff08;伪类&#xff09;after&#xff08;伪类&#xff09;往期回顾 hover&#xff08;伪类&#xff09; 伪类指的是用冒号加的 hover样式指的是&#xff0c;当用户光标移动到设定区域后&#xff0c;所执行的用法 如&#xff1a; <!DOCTYPE html>…

通过代理从ARDUINO IDE直接下载开发板包

使用免费代理 实现ARDUINO IDE2.3.2 下载ESP8266/ESP32包 免费代理 列表 测试代理是否可用的 网站 有时&#xff0c;代理是可用的&#xff0c;但依然有可能找不到开发板管理器的资料包。 可以多换几个代理试试。 代理的配置 文件 -> 首选项 -> 网络 进入后做如下配置…

2024百度之星第二场-小度的01串

补题链接&#xff1a; 码蹄集 一道经典线段树板子题。 区间修改01置换&#xff0c;区间查询子串权值。 唯一区别&#xff0c;权值要求的是相邻字符都不同所需修改的最小字符个数。 我们在线段树节点上分别维护当前连续区间&#xff1a; 奇数位是0的个数&#xff08;j0&…

Python和tkinter实现的字母记忆配对游戏

Python和tkinter实现的字母记忆配对游戏 因为这个小游戏用到了tkinter&#xff0c;先简要介绍一下它。tkinter是Python的标准GUI(图形用户界面)库&#xff0c;它提供了一种简单而强大的方式来创建图形界面应用程序。它提供了创建基本图形界面所需的所有工具&#xff0c;同时保…

OSI七层模型TCP/IP四层面试高频考点

OSI七层模型&TCP/IP四层&面试高频考点 1 OSI七层模型 1. 物理层&#xff1a;透明地传输比特流 在物理媒介上传输原始比特流&#xff0c;定义了连接主机的硬件设备和传输媒介的规范。它确保比特流能够在网络中准确地传输&#xff0c;例如通过以太网、光纤和无线电波等媒…

什么是有效的电子签名?PDF电子签名怎样具备法律效力?

电子签名逐渐成为商务文书和法律文件中不可或缺的一部分。《电子签名法》自2005年4月1日起施行&#xff0c;这一立法是中国信息化法律的重要里程碑&#xff0c;为电子签名应用奠定了法律基础。电子签名不仅仅是一种技术手段&#xff0c;更是一种法律认可的签名形式。那么究竟什…

Python私教张大鹏 PyWebIO通过事件回调实现表格的编辑和删除功能

从上面可以看出&#xff0c;PyWebIO把交互分成了输入和输出两部分&#xff1a;输入函数为阻塞式调用&#xff0c;会在用户浏览器上显示一个表单&#xff0c;在用户提交表单之前输入函数将不会返回&#xff1b;输出函数将内容实时输出至浏览器。这种交互方式和控制台程序是一致的…

学习TTS遇到的问题2 什么是TCN模型

学习TTS遇到的问题2 什么是TCN模型 什么是TCN模型怎么理解 TCN中的 dilation&#xff1f;什么是 Dilation具体例子数学表达作用例子代码示例 什么是TCN模型 https://juejin.cn/post/7262269863343079479 https://blog.csdn.net/weixin_57726558/article/details/132163074 由下…

出手便是王炸,曙光存储将高端存储推向新高度

二十年磨一剑&#xff0c;今朝试锋芒。 近日&#xff0c;曙光存储重磅发布全球首个亿级IOPS集中式全闪存储FlashNexus&#xff0c;正式宣告进入高端存储市场。 作为存储产业皇冠上的明珠&#xff0c;高端存储一向以技术难度大、市场准入门槛高和竞争格局稳定著称&#xff0c;…

从0-1搭建一个web项目(package.json)详解

本章分析package.json文件详解 本文主要对packge.json配置子文件详解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等…

Centos7源码方式安装sqle及开发相关

官方文档-源码安装 操作系统&#xff1a;centos:7.9,everything (DVD版应该也可以) (在ubuntu22.04装了两天之后乖乖开了一个新Centos7虚拟机) 镜像&#xff1a;清华大学开源软件镜像站 centos/7.9.2009 安装git sudo yum update -y sudo yum install -y git git --version安…

数据结构与算法笔记:高级篇 - B+树:MySql数据库索引是如何实现的?

概述 作为一名软件开发工程师&#xff0c;你对数据库肯定再熟悉不过了。MySQL 作为主流的数据库存储系统&#xff0c;它在我们的业务开发中&#xff0c;有着举足轻重的地位。在工作中&#xff0c;为了加速数据库中数据的查找速度&#xff0c;我们常用的处理思路是&#xff0c;…

01.Ambari自定义服务开发-项目初始化

文章目录 基础环境在PyCharm中初始化项目配置项目相关依赖在PyCharm中导入依赖 基础环境 PyCharmPython 2.7已经安装完成的Ambari服务端 在PyCharm中初始化项目 项目名称就是我们要安装服务的名称&#xff0c;要求名称为全大写&#xff0c;如&#xff1a;DORIS创建Python2.7…

龙迅LT8711V TYPE-CDP 1.2转VGA芯片,内置MCU,成熟批量产品

龙迅LT8711V描述&#xff1a; LT8711V是一种高性能的Type-C/DP1.2到VGA转换器&#xff0c;设计用于连接USB Type-C源或DP1.2源到VGA接收器。LT8711V集成了一个DP1.2兼容的接收器&#xff0c;和一个高速三通道视频DAC。此外&#xff0c;还包括两个CC控制器&#xff0c;用于CC通…

图像大小调整(缩放)

尺寸调整前尺寸调整前 1、背景介绍 在深度学习中&#xff0c;将图像调整到固定尺寸&#xff08;如28x28像素&#xff09;的操作是非常常见的&#xff0c;尤其是在处理诸如图像分类、物体检测和图像分割等任务时。这种操作有几个重要原因&#xff1a; 标准化输入&#xff1a;许…

【可控图像生成系列论文(五)】ControlNet 和 IP-Adapter 之间的区别有哪些?

系列文章目录 【可控图像生成系列论文&#xff08;一&#xff09;】 简要介绍了 MimicBrush 的整体流程和方法&#xff1b;【可控图像生成系列论文&#xff08;二&#xff09;】 就MimicBrush 的具体模型结构、训练数据和纹理迁移进行了更详细的介绍。【可控图像生成系列论文&…

【漏洞复现】锐捷统一上网行为管理与审计系统——远程命令执行漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 锐捷统一上网行为管理与审计系统naborTable/static_convert.php…

Linux系统编程(七)进程间通信IPC

进程间通讯的7种方式_进程间通信的几种方法-CSDN博客 管道 pipe&#xff08;命名管道和匿名管道&#xff09;&#xff1b;信号 signal&#xff1b;共享内存&#xff1b;消息队列&#xff1b;信号量 semaphore&#xff1b;套接字 socket&#xff1b; 1. 管道 内核提供&#x…

Arduino平台软硬件原理及使用——SR04超声波传感器的使用

文章目录&#xff1a; 一、超声波传感器工作原理 二、SR04超声波库的使用 三、SR04超声波传感器在Arduino中的使用 一、超声波传感器工作原理 如上图所示&#xff1a;HCSR04超声波传感器拥有4个针脚&#xff0c;除了VCC接正极、GND接负极外&#xff0c;还有两个引脚“Trig”及“…