Javascript getFullYear()返回错误的年份

时间:2016-03-02 03:36:09

标签: javascript

这是如此基本,但对我来说没有任何意义:

new Date("2010-01-01").getFullYear();

结果:2009

第w?我的目标是将日期重新格式化为mm / dd / yyyy,格式为yyyy-mm-dd ..

添加:

new Date("2010-01-01").getMonth();

结果:1​​1

new Date("2010-01-01").getDate();

结果:31

3 个答案:

答案 0 :(得分:5)

您传入new Date()的日期字符串中没有时区。它被解释为UTC。这里要理解的关键是将Date存储为Unix时间戳(自1970-01-01 00:00以来的秒数,使'Date'成为误导性名称),所以如果你没有指定日期内的时间,那就是将应用默认值。

Date.prototype.getFullYear()在您的LOCAL时间内检索该时间戳的全年。 (参见此处的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear

您位于UTC以西,2010-01-01 UTC是您当地时间的2009-12-31。

对于你的最后一个谜...... .getMonth()是基于0的,而不是基于1的,所以'11'是12月。

答案 1 :(得分:4)

不要使用Date构造函数来解析字符串,它在很大程度上依赖于实现并且不一致。

没有像“2016-02-29T12:00:00”这样的时区的ISO 8601日期和时间应被视为本地(即使用主机系统时区偏移来创建日期),但仅限日期的字符串是像“2016-02-29”一样对待UTC。第一种行为与ISO 8601一致,但第二种行为不符合。

某些版本的浏览器会将仅限日期的字符串视为UTC,有些则视为无效日期,因此始终手动解析字符串(双行函数或库可以提供帮助)。这样你就知道如何在所有主机中解析它。

答案 2 :(得分:0)

将新Date()中的日期作为参数提供。然后你会得到确切的结果。