为什么JavaScript在创建具有不同日期的年/月/日的新日期时会失去一天?

时间:2014-03-11 20:26:01

标签: javascript date

问题就是这么说。

> var x = new Date('1/1/2012')
undefined
> x
Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)
> new Date(1900+x.getYear(),x.getMonth(),x.getDay())
Sat Dec 31 2011 00:00:00 GMT-0600 (Central Standard Time)

为什么失去24小时?这很容易解决,但我很好奇它为什么会发生。

2 个答案:

答案 0 :(得分:1)

Date.getDay()获取星期几(0-6)。您想要使用的是Date.getDate(),它将返回日期(1-31)。

要回答您的问题,丢失的一天来自0的{​​{1}}值,因为该日恰好是星期日。在x.getDay()的{​​{1}}参数中使用零值时,结果会减去一天。

答案 1 :(得分:1)

  

getMonth()方法根据当地时间返回指定日期的月份,作为从零开始的值(其中零表示一年中的第一个月)。

     

getDay()方法根据本地时间返回指定日期的星期几,其中0代表星期日。

     

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Methods_2

> x.getMonth()
< 0
> x.getDay()
< 0