Javascript getFullYear()日期方法异常行为

Javascript getFullYear()日期方法异常行为,javascript,Javascript,有人能解释为什么getFullYear不会返回2014年吗 console.log(new Date('2014-01-01').getFullYear()) //2013 console.log(new Date('2014-01-01').getUTCFullYear()) //2014 发件人: 日期字符串“2014年3月7日”返回的日期与“2014-03-07”不同,除非本地时区为UTC。转换日期字符串“2014年3月7日”时,假定为本地时区。转换日期字符串“2014-03-07”时,

有人能解释为什么getFullYear不会返回2014年吗

console.log(new Date('2014-01-01').getFullYear()) //2013
console.log(new Date('2014-01-01').getUTCFullYear()) //2014
发件人:

日期字符串“2014年3月7日”返回的日期与“2014-03-07”不同,除非本地时区为UTC。转换日期字符串“2014年3月7日”时,假定为本地时区。转换日期字符串“2014-03-07”时,假定UTC时区。这将导致两个不同的日期值,具体取决于正在转换的字符串的格式

因此,当您要求它解析“2014-01-01”时,您得到的是UTC时间

然后对对象调用
.getFullYear()
,该对象使用本地时间。如果你像我一样住在美国东部,那么它基本上从内部时间减去4小时,然后返回年份

下面是发生的情况:

  • “2014-01-01”转换为“138853440000”
  • 调用
    .getFullYear()
    ,并将“138853440000”转换为本地时间
  • 当地时间大约是“13885341600000”
  • “138853416万”的新年还没有到来,所以还是2013年
  • 所有这些都意味着,如果我们做类似的事情

    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
    
    根据: 区别在于,当您以YYYY-MM-DD格式指定字符串时,您得到的日期是GMT时区的上午12点,而当您以DD-MM-YYYY格式指定日期时,您得到的日期是当前时区的上午12点


    因此,基本上,由于您指定的是2014年新闻年日,当它从格林尼治标准时间转换为您的当地时间时,它认为它是12-31-13,而不是01-01-14

    回答得好!对我来说,这在完整的细节和简洁之间达到了完美的平衡。唯一缺少的是MDN引用应该是一个链接。谢谢你的努力。谢谢你,很好的回答!添加了一个指向MDN引用的链接有趣的是,在字符串中添加一个尾随
    空格
    ,会更改结果
    console.log(新日期('2014-01-01')。getFullYear()
    将为您提供
    2014
    。。我猜Chrome(可能还有其他浏览器,我还没有检查)没有调整空白,所以它们会回到默认值…getMonth()=11(12月),…getDate()=31,…getDay=2(周二)