我有这两个控制台日志,但它们返回不同的时间(-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,
答案 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()
。