javascript - 这是什么时间格式,如何将其转换为纪元?

标签 javascript node.js date

我有两种格式的时间戳数据,其中 3F536DDA -> 13783970857680003F52C3C3 -> 1378353476238000。我似乎无法弄清楚什么格式 3F536DDA 是什么,也不知道如何将它转换为有问题的时代。任何帮助将不胜感激!

更新

我发现了这个:

自 1980 年 1 月 6 日格林威治标准时间 00:00:00 以来以秒为单位的修复时间的 8 位十六进制表示。

这似乎是 GPS 时间。

我可能从这里的转换中遗漏了一些东西,我只是减去 1980 年 1 月 6 日和 1970 年 1 月 1 日之间的差异...

time = (1378397085 - 315964800)

console.log '3F536DDA' # What I expected
console.log time.toString(16) # What I get: 3F536D1D 

最佳答案

好吧,这些看起来就像十六进制数字,自 1/1/1970 UTC 以来的秒数。

3F536DDA hex == 1062432218 dec == Mon, 01 Sep 2003 16:03:38 GMT
3F52C3C3 hex == 1062388675 dec == Mon, 01 Sep 2003 03:57:55 GMT

自 1/1/1970 UTC 以来,其他数字看起来像十进制微秒,但它们不等于其他数字:

1378397085768000 == Thu, 05 Sep 2013 16:04:45 GMT
1378353476238000 == Thu, 05 Sep 2013 03:57:56 GMT

如果这些不是您想要的日期,则可能涉及其他时间。例如,如果它们起源于 Microsoft Windows,则它们肯定会有所不同。

你从哪里弄来的?这些知识将有助于他们的解释。

更新

既然你说它们是基于 1980 年 1 月 6 日的纪元,那么你可以这样做:

var d = new Date(Date.UTC(1980,0,6) + parseInt('3F536DDA', 16) * 1000);
d.toISOString();  // 2013-09-05T16:03:38.000Z

或者更好的是,使用 moment.js

var m = moment.utc("1980-01-06").add('seconds', parseInt('3F536DDA', 16));
m.toISOString();  // 2013-09-05T16:03:38.000Z

关于javascript - 这是什么时间格式,如何将其转换为纪元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18691061/

相关文章:

javascript - 单击元素外部的另一个链接时返回到先前状态的最有效方法是什么? (jQuery)

javascript - 从 Node.js 中的模块导出函数的语法是什么?

javascript - Express 与浏览器结合使用 Node 同步

javascript - JS (node.js) - 如果我进行异步调用但不等待它完成,是否可以保证完成执行?

Javascript:如何生成每月日期?

java - 在Java中减去两个日期

PHP如何在mysql中增量增加日期

javascript - 如何从javascript中的字符串中提取数字数组

javascript - Durandal 框架基础知识

javascript - JS - 在对象数组中搜索 - 优化