我目前正在编写某种基于 javascript 的客户端日历并观察到一些问题。在网上,我可以找到代码示例,人们在 Date 构造函数中使用日期溢出。
IE
// get the first day of the next month
var myDate = new Date(someDate.getFullYear(),someDate.getMonth(),32);
myDate.setDate(1);
这个概念的一般思想是,由于没有 32 天的月份,构造函数将在下个月内创建一个日期。我什至看到了带有负溢出的代码示例:
IE
// get the last day of the previous month
var myDate = new Date(someDate.getFullYear(),someDate.getMonth(),1);
myDate.setDate(-1);
现在,虽然这似乎在很多情况下都有效,但我终于发现了一个矛盾:
// this prints "2012-12-30" expected was "2012-12-31"
var myDate = new Date(2013,0,1);
myDate.setDate(-1);
进一步检查最终发现,像 new Date(2013,0,23) 或 new Date(2013,0,16) 结合 setDate(-1) 这样的日期都以“2012-12-31”结尾。最后我观察到使用 -1 似乎减少了两天(为了获得预期的结果 setDate(0) 必须使用)。
这是浏览器实现中的错误还是代码示例在互联网垃圾中传播?
此外,这个带有正负溢出的 setDate 是否可以安全地被所有主流浏览器使用和统一实现?