Javascript 二月十五日不是';找不到
我使用javascript,在控制台中运行这个Javascript 二月十五日不是';找不到,javascript,date,Javascript,Date,我使用javascript,在控制台中运行这个 d = new Date(); d.setMonth(1); d.setFullYear(2009); d.setDate(15); d.toString(); 输出如下: "Sun Mar 15 2009 18:05:46 GMT-0400 (EDT)" 为什么会发生这种情况?这似乎是一个浏览器错误 d = new Date(); d.setDate
d = new Date();
d.setMonth(1);
d.setFullYear(2009);
d.setDate(15);
d.toString();
输出如下:
"Sun Mar 15 2009 18:05:46 GMT-0400 (EDT)"
为什么会发生这种情况?这似乎是一个浏览器错误
d = new Date();
d.setDate(15);
d.setMonth(1);
d.setFullYear(2009);
d.toString();
这是可行的。这是因为当你初始化一个新日期时,它与今天的日期一起出现,所以今天是2008年10月30日,然后你将月份设置为2月,因此没有2月30日,所以先设置日期,然后设置月份,然后设置年份:
d = new Date();
d.setDate(15);
d.setMonth(1);
d.setFullYear(2009);
但正如所说,最好使用日期构造函数:
new Date(year, month, date [, hour, minute, second, millisecond ]);
最好一步构造一个日期对象,以避免日期对象处于不明确或无效状态:
d = new Date(2009, 1, 15);
在使用Firebug在XP上进行了一系列FF3测试之后,我可以告诉您以下几点
- 在调用Date.setMonth()之后调用Date.setDate()将生成这种奇怪的行为
- Date.setMonth()强制时区为CST(或某些不支持DST的区域)
- setDate()强制时区为CDT(或某些支持DST的时区)
我能提供的唯一解决方案是:在设置月份之前设置日期。这通常可以避免javascript日期API的错误:
d.setDate(1);
d.setFullYear(year);
d.setMonth(month);
d.setDate(day);
给定年+月+日为“有效”组合,例如,使用getFullYear()、getMonth()、getDate()从另一个日期对象获取
重要的部分是:
- 从
开始,以避免当前日期值为29、30或31时可能出现的滚动setDate(1)
- 在
之前调用setDate(day)
,以避免在当前月份值“有问题”的情况下发生相同的滚动(因为初始setMonth(month)
将无效)setDate(1)