javascript - 日期处理 Unix 日期不正确(或者我错误地使用日期?)

标签 javascript unix

我有以下数据结构。第一列是间隔。间隔数据的第一行是unix时间,后续数据是间隔(即300*1、300*2等)。另一列是数据值。这是数据的头部:

a1521207300,555.45
1,554.53
2,554.07
3,553.9
4,552.67

在这里,我将 unix 时间转换为 Date 对象。这里的 a 是装饰性的,所以我将 slice() 设置为 1,如下所示:

    var rawTime = data[0].interval;
    var timeValue = Math.round(rawTime.slice(1));
    console.log(timeValue)
    console.log(new Date(timeValue))

我还尝试使用 parseInt() 而不是 round()。控制台显示这个unix时间相当于:Jan 18 1970,我对此大笑不已。然后我开始思考,也许我做错了什么。这应该是最近的日期——2018 年 3 月 16 日。这很奇怪,因为我的理解是 javascript 可以按照 this answer 直接传递 unix 日期。 .

我还在转换站点上检查了 UNIX 时间:www.onlineconversion.com/unix_time.htm

这证实了这确实是 2018 年 3 月 16 日的时间戳。

问题:为什么我的 2018 年 3 月数据的 Unix 日期被视为 1970 年代的日期?也许 a 毕竟实际上正在做某事......无论如何,处理这个时间戳的正确方法是什么?只有10位数字,看起来不是什么精度问题。我相信 Date 可以处理最多 13 位数字的 unix 时间。

最佳答案

根据 documentation ,当您使用整数值调用 new Date(value) 时,它将用作自 1970 年 1 月 1 日以来的毫秒数。要获取所需的日期,值 1521207300 似乎是秒数而不是毫秒数。也就是说,您错过了 1000 倍。new Date(1521207300000) 给出的是 2018 年 3 月 16 日星期五。

When I take away new from new Date it seems to be ok. Not sure why though.

文档提到了不同的行为:

Note: JavaScript Date objects can only be instantiated by calling JavaScript Date as a constructor: calling it as a regular function (i.e. without the new operator) will return a string rather than a Date object; unlike other JavaScript object types, JavaScript Date objects have no literal syntax.

当作为函数Date(value)调用时,它似乎将值视为秒数,而不是毫秒数。我没有深入挖掘来确认这一点,因为这并不重要:文档说不要以这种方式使用它(并且由于它提供了一个字符串而不是日期对象,所以它无论如何都不是很有用)。

关于javascript - 日期处理 Unix 日期不正确(或者我错误地使用日期?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49349713/

相关文章:

javascript - 如何通过 JavaScript 在 HTML 中单击另一个元素时更改一个元素的 bool 值?

linux - 在 Bash 中执行 TAR 失败

python - fasta 文件标题行插入列

javascript - pinmarklet.js 获取图片

linux - 如何更改 child 目录中的文件名

linux - 将一行中的第一个单词替换为上一行中的单词

linux - 有没有办法将 "echoing"到标准输出,将什么作为标准输入重定向到程序(Unix)?

javascript - 如何阻止来自 Node 中不同来源的发布请求

java - 单击后禁用左侧导航 Pane 上的链接

javascript - <dom-repeat> 中的 <dom-if> 不会在项目更改时调用方法