任何人都可以解释为什么getFullYear不会返回2014年?
console.log(new Date('2014-01-01').getFullYear()) //2013
console.log(new Date('2014-01-01').getUTCFullYear()) //2014
答案 0 :(得分:5)
来自MDN:
" 2014年3月7日"的dateString;返回与" 2014-03-07"不同的日期除非本地时区是UTC。转换" 2014年3月7日"的dateString时假设当地时区。转换" 2014-03-07"的dateString时假定为UTC时区。这会产生两个不同的Date值,具体取决于要转换的字符串的格式。
因此,当您要求它解析" 2014-01-01"时,您将获得UTC时间。
然后在您的对象上调用.getFullYear()
,该对象使用当地时间。如果你像我一样住在美国东部,那么它基本上会从内部时间减去4小时并返回年份。
所以发生了什么:
.getFullYear()
被称为" 1388534400000"转换为当地时间所有这些都意味着,如果我们做类似
的事情console.log(new Date('January 1, 2014').getUTCFullYear()); // 2014
console.log(new Date('January 1, 2014').getFullYear()); // 2014
我们将在同一年获得,因为我们告诉浏览器在新年时使用我们的时区,但它们并不等同:
console.log(new Date('January 1, 2014').getUTCHours()); // 5
console.log(new Date('January 1, 2014').getHours()); // 0
答案 1 :(得分:1)
根据this: "不同之处在于,当您以YYYY-MM-DD格式指定字符串时,您将获得格林尼治标准时区时区的日期,并且当您以DD-MM-YYYY格式指定日期时,您将获得日期是当前时区的上午12点。"
所以基本上因为你指定2014年新闻年,当它从格林威治标准时间转换到你当地时间时它认为它是12-31-13而不是01-01-14。