为什么JavaScript在使用不同日期的年/月/日创建新日期时会丢失一天?

为什么JavaScript在使用不同日期的年/月/日创建新日期时会丢失一天?,javascript,date,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小时?解决这个问

这个问题说明了一切

> 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小时?解决这个问题很容易,但我很好奇为什么会发生这种情况。

Date.getDay()
获取一周中的某一天(0-6)。您要使用的是
Date.getDate()
,它将返回日期(1-31)

为了回答您的问题,缺少的日期来自
x.getDay()
中的
0
值,因为那天恰好是星期天。当在
新日期()
参数中使用零值时,结果减去一天

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

方法根据本地时间返回指定日期的星期几,其中0表示星期天

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

您是否尝试过检查
x.getMonth()
x.getDay()
?还是新日期(2012年1月1日)的输出?你会发现它们是不同的,你的输入是不好的。我更好奇的是,0如何变成12月,0如何变成31日。Corey解释了日期->日期要求。事实证明,只要修改day->date部分就可以解决所有问题。
> x.getMonth()
< 0
> x.getDay()
< 0