我有以下测试代码:
toList()
这跟踪
var d1 : Date = new Date("2016/02/20 15:00:00 UTC-0000");
trace(d1.toUTCString());
d1.monthUTC++;
trace(d1.toUTCString());
var d2 : Date = new Date("2016/03/31 15:00:00 UTC-0000");
trace(d2.toUTCString());
d2.monthUTC++;
trace(d2.toUTCString());
为什么第二个示例中的日期会跳过1个月和1天而不是仅仅一个月? (从3月31日到5月1日)?
答案 0 :(得分:1)
我认为解决方案在于Date类的内部工作方式:
当我的日期设置为当月31日时,例如:
"2016/03/31 15:00:00 UTC-0000"
我把月份增加一个,在内部变成:
"2016/04/31 15:00:00 UTC-0000"
然后再次在内部解决。但由于4月只有30天,因此日期溢出至5月:
"2016/05/01 15:00:00 UTC-0000"
如果我尝试将date
字段设置为4月31日,也会发生同样的事情。
这也意味着官方的ActionScript文档是错误的:
setUTCMonth()
以通用时间(UTC)设置月份和(可选)日期,并以毫秒为单位返回新时间。调用此方法不会修改其他字段,但如果因调用此方法而导致星期几发生更改,则Date.getUTCDay()和Date.getDay()方法可能会报告新值。
当设置月份也改变日期时,他们没有想到这种边缘情况。
同样的事情也发生在JavaScript中。