Date类setMonth设置奇怪的值

时间:2016-03-06 02:23:03

标签: javascript actionscript-3 datetime actionscript

我有以下测试代码:

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日)?

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中。