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

时间:2018-03-18 15:32:56

标签: javascript unix

我有以下数据结构。第一列是间隔。区间数据的第一行是单位时间,后续数据是区间(即300 * 1,300 * 2,等等)。另一列是数据值。以下是数据的负责人:

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

在这里,我将unix时间转换为Date对象。这里的a是装饰性的,所以我{1}}就像这样:

slice()

我也尝试使用 var rawTime = data[0].interval; var timeValue = Math.round(rawTime.slice(1)); console.log(timeValue) console.log(new Date(timeValue)) 代替parseInt()。控制台显示这个unix时间相当于:round()我非常狂热。然后我开始思考,也许我做错了什么。它应该是一个非常近期的日期 - 2018年3月16日。这很奇怪,因为我的理解是javascript可以直接按照this answer传递一个unix日期。

我还在转换网站上查看了unix时间:www.onlineconversion.com/unix_time.htm

确认它确实是2018年3月16日的时间戳。

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

1 个答案:

答案 0 :(得分:1)

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

  

当我从新日期带走新东西时似乎没问题。不知道为什么会这样。

文档提到了不同的行为:

  

注意:JavaScript Date对象只能通过调用JavaScript Date作为构造函数来实例化:将其称为常规函数(即没有new运算符)将返回一个字符串而不是Date对象;与其他JavaScript对象类型不同,JavaScript Date对象没有文字语法。

当作为函数Date(value)调用时,它将值视为秒数而不是毫秒数。我没有深入挖掘以确认这一点,因为它并不重要:文档说不要以这种方式使用它(因为它提供了一个字符串而不是一个日期对象,它不是非常有用)。