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

news2025/2/26 7:27:01

一、介绍

1、10位时间戳

2、13位时间戳

3、17位时间戳

4、时间戳转换工具

二、13位时间戳的转换

1、转标准日期

2、转格式化日期

三、10位时间戳的转换

1、转标准日期

2、转格式化日期

四、17位时间戳的转换

1、解析思路

2、解析过程

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"的毫秒数:-11644502743000

    let epoch_end = new Date("1970-1-1 00:00:00:000");      
    console.log(epoch_end.getTime());   // "1970-1-1 00:00:00"的毫秒数:-28800000

    let epoch = (epoch_end.getTime() - epoch_start.getTime());      
    console.log(epoch);      // 相差epoch: 11644473943000 毫秒

    let timeStamp14 = Math.floor(timeStamp / 1000);     // timeStamp14: 13363929430000
    console.log("timeStamp14:", timeStamp14);

    let ms = timeStamp14 - epoch;   // ms: 1719455487000
    console.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.coloradmin.cn/o/1880657.html

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

相关文章

【学习笔记】Redis学习笔记——第5章 跳跃表

第5章 跳跃表 有序集合&#xff0c;ZSet关键组成部分&#xff0c;时间复杂度媲美平衡树&#xff0c;且实现简单。 5.1 跳跃表的实现 可以简单理解为每个节点会有一些指向后面跨越N个节点的指针&#xff0c;比如说Node1不仅有指向Node2的指针&#xff0c;还可以有Node5的&…

【分布式计算框架 MapReduce】高级编程—搜索日志数据分析

目录 一、对于 sogou_500w_utf 数据&#xff0c;使用 MapReduce 编程模型完成对以下数据的分析任务 1. 统计 2011-12-30 日搜索记录&#xff0c;每个时间段的搜索次数 &#xff08;1&#xff09;运行截图 &#xff08;2&#xff09; 源代码 2. 统计 2011-12-30 日 3 点至 …

SCCB协议介绍,以及与IIC协议对比

在之前的文章里已经介绍了IIC协议&#xff1a;iic通信协议 这篇内容主要介绍一下SCCB协议。 文章目录 SCCB协议&#xff1a;SCCB时序图iic时序图SCCB时序 VS IIC时序 总&#xff1a;SCCB协议常用在摄像头配置上面&#xff0c;例如OV5640摄像头&#xff0c;和IIC协议很相似&…

Kubernetes Artemis系列 | 使用 ArtemisCloud Operator 部署 artemis

目录 一、ArtemisCloud Operator 介绍二、部署ArtemisCloud Operator三、使用 ArtemisCloud Operator 部署 artemis四、管理队列五、缩减规模时消息迁移 一、ArtemisCloud Operator 介绍 ArtemisCloud Operator 是一个用于管理和部署云端基础设施的工具。它基于 Kubernetes 平…

ArtTS系统能力-通知的学习(3.1)

上篇回顾&#xff1a; ArtTS语言基础类库-容器类库内容的学习(2.10.2&#xff09; 本篇内容&#xff1a; ArtTS系统能力-通知的学习&#xff08;3.1&#xff09; 一、 知识储备 1. 基础类型通知 按内容分成四类&#xff1a; 类型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…

大物3错题整理

平衡位置&#xff1a;在O点上的位置 相位&#xff1a; 当N很大的时候&#xff0c;wxwywz。因此&#xff0c;平均平动动能除以3&#xff0c;就是能量均分定理。 W F在x上的积分 Π时无单位 180&#xff0c;就是单位 1rad&#xff0c;rad就是单位 左手定则、右手定则、安培定…

金融科技如何多角度助力小微企业融资

一、引言 在全球化与数字化交织的时代背景下&#xff0c;金融科技&#xff08;FinTech&#xff09;作为新兴力量&#xff0c;正逐步改变传统的金融业态&#xff0c;尤其在助力小微企业融资方面&#xff0c;金融科技展现出了多元化的价值和优势。本文将从不同角度探讨金融科技如…

数据同步软件有哪些

数据同步软件有哪些呢&#xff1f;随着企业规模的扩大&#xff0c;企业数据也积累得越来越多&#xff0c;万一发生宕机风险&#xff0c;那么这个损失将不可估量。所以为了容灾备用&#xff0c;我们往往需要将数据同步到另一台备胎服务器上&#xff0c;进行冗余。 那么需要同步的…

适配手机《植物大战僵尸杂交版》最新整合包,附Android、iOS、Windows保姆级教程和工具合集!

最近&#xff0c;新版的《植物大战僵尸杂交版》火爆全网啊&#xff01;许多小伙伴不知道手机和电脑怎样安装设置才能畅玩《杂交版》&#xff0c;所以今天阿星特意为大家准备了一份安装工具集。 里面有安卓、iOS及电脑端的安装包&#xff0c;包含安装视频教程、修改器、防闪退、…

论文阅读《One-Step Image Translation with Text-to-Image Models》

Abstract. 在这项工作中&#xff0c;我们解决了现有条件扩散模型的两个局限性&#xff1a;迭代去噪过程导致的推理速度慢&#xff0c;以及模型微调对配对数据的依赖。为了解决这些问题&#xff0c;我们引入了一种通用方法&#xff0c;通过对抗学习目标将单步扩散模型适应新任务…

【C++】string基本用法(常用接口介绍)

文章目录 一、string介绍二、string类对象的创建&#xff08;常见构造&#xff09;三、string类对象的容量操作1.size()和length()2.capacity()3.empty()4.clear()5.reserve()6.resize() 四、string类对象的遍历与访问1.operator[ ]2.正向迭代器begin()和end()3.反向迭代器rbeg…

昇思25天学习打卡营第10天 | 基于MindNLP+MusicGen生成自己的个性化音乐

基于MindNLPMusicGen生成自己的个性化音乐 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型&#xff08;LM&#xff09;的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量的音乐样本&#xff0c;相关研究成果参考论文《Simple and Controllable …

Keepalive技术

文章目录 一、Keepalive基础vrrp技术Keepalived介绍Keepalived架构 二、 Keepalived 相关文件配置文件组成全局配置虚拟路由器配置 三、配置lvs和keepalive联动服务器架构抢占模式配置配置单播、组播配置通知模块日志功能脑裂现象 四、keepalived和nginx联动keepalive和其他应用…

html文章卡片

完成效果 中医网站的文本卡片制作&#xff0c;其中用到了grid布局 css基础知识回顾 阴影样式 好的阴影样式可以保存 box-shadow: 6px 6px 5px hsla(0, 0%, 0%, 0.02), 25px 25px 20px hsla(0, 0%, 0%, 0.03), 100px 100px 80px hsla(0, 0%, 0%, 0.05); grid-template-column…

Python的numpy简单使用

1.可以调用引入numpy里面的函数&#xff0c;如add可以把俩数相加&#xff0c;也可以创建一个数组arr&#xff0c;arr.shape是数组arr的属性&#xff0c;如果后有跟&#xff08;&#xff09;就是里面的一个函数 type()函数可以知道里面是什么类型 变量.shape可以知道这个变量是…

这些并发编程技术你都知道吗?

与其碌碌无为&#xff0c;不如兴风作浪。 虽然不是所有的系统都需要很多的并发编程技术&#xff0c;但是掌握常见的高并发秘籍&#xff0c;便能让我们的系统快起来&#xff0c;面对访问量的剧增从容应对。 接下来&#xff0c;为我们一起来看看常见的高并发技术有哪些。总结起来…

NAS教程丨铁威马如何登录 SSH终端?

适用型号&#xff1a; 所有TNAS 型号 如您有特殊操作需要通过 SSH 终端登录 TNAS&#xff0c;请参照以下指引&#xff1a; (注意: 关于以下操作步骤中的"cd /"的指令,其作用是使当前 SSH/Telnet 连接的位置切换到根目录,以免造成对卷的占用.请不要遗漏它.) Windows…

Django 对模型创建的两表插入数据

1&#xff0c;添加模型 Test/app8/models.py from django.db import modelsclass User(models.Model):username models.CharField(max_length50, uniqueTrue)email models.EmailField(uniqueTrue)password models.CharField(max_length128) # 使用哈希存储密码first_name …

Excel 数据筛选难题解决

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

leetCode.98. 验证二叉搜索树

leetCode.98. 验证二叉搜索树 题目描述 代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(n…