当我使用不同的Date构造函数时,我会收到类似的Date对象,但是当我得到epoch值时,它们的值略有不同。 它是一个错误或什么,或者我只是将错误的值格式传递给构造函数?
> date1 = new Date();
Sun Oct 04 2015 15:31:33 GMT+0330 (IRST)
> date2 = new Date(date1.toString());
Sun Oct 04 2015 15:31:33 GMT+0330 (IRST)
> date3 = new Date(date1.toISOString());
Sun Oct 04 2015 15:31:33 GMT+0330 (IRST)
> date1.getTime();
1443960093117
> date2.getTime();
1443960093000
> date3.getTime();
1443960093117
我在Ubuntu 14.04.1中使用节点(v0.12.2)。
答案 0 :(得分:3)
显然date1.toString()
在date1.toISOString()
时不考虑毫秒。是的,这不是一个错误,你只是传递不同的字符串。对我来说:
var date1 = new Date();
console.log(date1.toString(), date1.toISOString())
// Sun Oct 04 2015 14:54:37 GMT+0200
// 2015-10-04T12:54:37.113Z
答案 1 :(得分:2)
ISO日期格式包括表示秒的小数部分的字段。默认日期格式不会,并且当解析默认日期格式时,系统会假定第二个值是精确的。
> new Date().toString()
'Sun Oct 04 2015 07:53:48 GMT-0500 (CDT)'
> new Date().toISOString()
'2015-10-04T12:53:58.769Z'
在ISO字符串中,.769
是秒分数部分。
答案 2 :(得分:1)
当您只记录日期时,它会自动使用默认方法.toString()版本,该版本会丢弃毫秒数。使用下面的代码,您可以看到。### Z被删除.toString()而不是.toISOString(),因为它是扩展的ISO格式。
var date1 = new Date();
var date2 = new Date(date1.toString());
var date3 = new Date(date1.toISOString());
console.log('date1 ' + date1.toISOString());
console.log('date2 ' + date2.toISOString());
console.log('date3 ' + date3.toISOString());
console.log('date1 ' + date1.getTime());
console.log('date2 ' + date2.getTime());
console.log('date3 ' + date3.getTime());
返回
date1 2015-10-04T13:34:37.778Z
date2 2015-10-04T13:34:37.000Z
date3 2015-10-04T13:34:37.778Z
date1 1443965677778
date2 1443965677000
date3 1443965677778
希望这有帮助。