我想将时间戳转换为日期:
status_transitions:
{ finalized_at: 1557419382,
marked_uncollectible_at: null,
paid_at: 1557419384,
voided_at: null },
尤其是paid_at: 1557419384
。但是,当我尝试new Date(1557419384)
时,没有得到预期的结果。如果我使用Date.setMilliseconds(),我会这样做。
Date.setMilliseconds()
const ms = 1557419384;
const fromConstructor = new Date(ms);
const fromFn = new Date();
const strangeOutput = fromFn.setMilliseconds(ms);
console.log(`Milliseconds: ${ms}`);
console.log(`Output from setMilliseconds: ${strangeOutput}`);
console.log(`Date from new Date(ms): ${fromConstructor}`);
console.log(`Date using setMilliseconds(ms): ${fromFn}`);
上面的代码输出为:
Milliseconds: 1557419384
Output from setMilliseconds: 1558978824384
Date from new Date(ms): Sun Jan 18 1970 18:36:59 GMT-0600 (Central Standard Time)
Date using setMilliseconds(ms): Mon May 27 2019 12:40:24 GMT-0500 (Central Daylight Time)
为什么从数字创建新日期不会产生与setMilliseconds()相同的结果?另外,为什么setMilliseconds()
的输出与传递的实际毫秒数不同?
我已经读过the docs,它们似乎暗示这两种方法之间应该没有区别。
答案 0 :(得分:2)
请考虑文档here的setMilliseconds()
部分中显示的示例。
var theBigDay = new Date();
theBigDay.setMilliseconds(100);
立即运行此命令,这将为我提供值1557421875100
。请注意,只有最后三位数字为100。因此,它不会将整个日期对象设置为100,而仅将值的毫秒部分设置为100。其余部分来自new Date()
,这是当前基于UTC的时间戳。
至于为什么您没有从new Date(1557419384)
得到预期的结果,该时间戳似乎是 seconds ,而不是毫秒。将该值乘以1000,可以得到一个更合理的值。 (Unix timestamps通常用整秒表示,在这里似乎是这种情况。)
答案 1 :(得分:1)
为什么
setMilliseconds()
的输出与传递的实际毫秒数不同?
更仔细地检查文档。 setMilliSeconds
有一个“ 参数:
一个介于0到999之间的数字,表示毫秒。”及其描述为“ ”。如果您指定的数字超出预期范围,则Date对象中的日期信息将相应地更新。例如,如果您指定1005,则秒数将增加1,并且5表示毫秒。“。
因此new Date()
用当前时间创建一个日期,然后在其中添加毫秒值。
为什么用数字创建新日期不会产生与
setMilliseconds()
相同的结果? 我已经阅读了文档,它们似乎暗示这两种方法之间应该没有区别。
您要寻找的是setTime
。 new Date().setTime(millseconds)
创建一个等于new Date(milliseconds)
的对象。
当我尝试
new Date(1557419384)
时,没有得到预期的结果。
正如马特·约翰逊(Matt Johnson)所说,该值似乎是秒而不是毫秒。乘以1000。