我有以下数据结构。第一列是间隔。区间数据的第一行是单位时间,后续数据是区间(即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时间。
答案 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)
调用时,它将值视为秒数而不是毫秒数。我没有深入挖掘以确认这一点,因为它并不重要:文档说不要以这种方式使用它(因为它提供了一个字符串而不是一个日期对象,它不是非常有用)。