new Date()vs Date()以及为什么它会返回不同的时间(-2小时)?

时间:2015-04-20 15:47:09

标签: javascript date time

我有这两个控制台日志,但它们返回不同的时间(-2小时关闭)。

console.log(new Date()) // Date 2015-04-20T15:37:23.000Z
console.log(Date()) // "Mon Apr 20 2015 17:37:23 GMT+0200 (CEST)"

我知道使用Data()与使用构造函数和调用.toString()相同。

但是,我确实需要Date()时间而不是新的Date()时间。那么为什么它会返回错误的时间,如何重置它以输出正确的时间?

THX,

2 个答案:

答案 0 :(得分:5)

  

那么为什么它会返回错误的时间,如何重置它以输出正确的时间呢?

您的第一个语句是使用console.log对象调用Date。看来,您使用的任何浏览器/控制台插件都选择使用UTC中的ISO-8601字符串显示该Date对象。例如,格式由console实现选择。

您的第二个声明是使用字符串调用console.log,因此格式由Date实施选择。从JavaScript引擎到JavaScript引擎的specification makes no requirement on what that string format must be(是的,真的*),除了它必须在本地时区。

显然,在您的浏览器上,console实施和Date#toString实施不匹配。

  

但是,我确实需要Date()时间而不是新的Date()时间。

这些字符串定义了相同的时刻(加或减几微秒);只是字符串已经准备好了不同的时区设置。

如果您需要在本地时间将字符串记录到控制台,请使用

console.log(String(new Date()));

...可靠地从Date对象获取字符串,而不是console生成的字符串。


*是的,你从Date#toString获得的格式是未定义的,完全取决于JavaScript实现;唯一的要求是Date()Date.parse()都可以解析字符串toString输出并返回原始日期。 (JavaScript甚至没有标准的日期/时间格式until ES5,它只适用于toISOString方法,而不是toString。并且ES5稍微有点错误,它必须是amended in ES6,导致目前不幸的情况是Chrome做了一件事,而Firefox在以新的日期/时间格式解析字符串而没有时区的情况下又做了另一件事。)

答案 1 :(得分:2)

那些是同一时间。 Date()生成的字符串只使用不同的时区,从GMT+0200 (CEST)后缀可以看出。

因此,如果您需要在当地时区使用时间字符串,请使用.toString()代替.toUTCString()