这是如此基本,但对我来说没有任何意义:
new Date("2010-01-01").getFullYear();
结果:2009
第w?我的目标是将日期重新格式化为mm / dd / yyyy,格式为yyyy-mm-dd ..
添加:
new Date("2010-01-01").getMonth();
结果:11
new Date("2010-01-01").getDate();
结果:31
答案 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()中的日期作为参数提供。然后你会得到确切的结果。