【问题标题】:Date class setMonth sets weird values日期类 setMonth 设置奇怪的值
【发布时间】:2016-06-19 17:46:43
【问题描述】:

我有以下测试代码:

    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());

这个痕迹

[trace] Sat Feb 20 15:00:00 2016 UTC
[trace] Sun Mar 20 15:00:00 2016 UTC
[trace] Thu Mar 31 15:00:00 2016 UTC
[trace] Sun May 1 15:00:00 2016 UTC

为什么第二个例子中的日期跳了 1 个月又 1 天,而不是仅仅一个月? (从 3 月 31 日到 5 月 1 日)?

【问题讨论】:

    标签: javascript actionscript-3 datetime actionscript


    【解决方案1】:

    我认为解决方案在于 Date 类的内部工作方式:

    当我将日期设置为每月 31 日时,例如:
    "2016/03/31 15:00:00 UTC-0000"
    我将月份加一,内部变为:
    "2016/04/31 15:00:00 UTC-0000"
    然后再次在内部解决。但是由于四月只有30天,日期溢出到五月:
    "2016/05/01 15:00:00 UTC-0000"

    如果我尝试将 date 字段设置为 4 月 31 日,也会发生同样的情况。

    这也意味着官方的 ActionScript 文档是错误的:

    setUTCMonth()
    以通用时间 (UTC) 设置月份和可选的日期,并以毫秒为单位返回新时间。调用此方法不会修改其他字段,但如果调用此方法导致星期几发生变化,Date.getUTCDay() 和 Date.getDay() 方法可能会报告一个新值。

    当设置月份也会改变日期时,他们没有想到这种极端情况。

    同样的事情也发生在 JavaScript 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2013-06-12
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多