javascript类似的Date对象,返回不同的epoch

javascript similar Date objects, return defferent epochs?

本文关键字:返回 epoch 对象 Date javascript      更新时间:2023-09-26

当我使用不同的日期构造器时,我收到类似的日期对象,但当我得到那里的epoch值时,它们的值略有不同。这是一个bug还是什么,或者我只是传递错误的值格式到构造函数?

> 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中使用node(v0.12.2)

显然date1.toString()不考虑毫秒,而date1.toISOString()考虑毫秒。是的,这不是bug,你只是传递了不同的字符串。对我来说:

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

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为秒分部分

当你只是记录一个日期时,它会自动使用默认方法。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