【问题标题】:Javascript gives invalid dateJavascript给出无效日期
【发布时间】:2017-01-19 23:58:16
【问题描述】:

我从 API 获取服务器日期(包括时区)。我想把它转换成日期对象。

当我这样做时

var demo2 = new Date("THU JAN 19 15:37:56 PST 2017"); //It works!

var demo = new Date("FRI JAN 20 07:50:07 SGT 2017"); //Invalid date

为什么?如果它是 SGT,那么它不起作用,但它适用于 PST

我正在尝试将此日期传递给 dateTimePicker

    $datetimepicker.datetimepicker({
        minDate: new Date(this.serverTime),
        defaultDate: new Date(this.serverTime),
    });

如何使用 Date / MomentJS 解决这个问题?

【问题讨论】:

  • 您没有时区。您有几个字母可能指几个时间部分时区之一的缩写。如果您的服务器上的字符串确实是这样 - 您必须返回到您的服务器并发出有效的输出,最好是 ISO8601 格式。

标签: javascript momentjs jquerydatetimepicker


【解决方案1】:

一般来说,您永远不应该解析时区缩写。它们充其量是不一致的,而且经常模棱两可。

例如,CST 应该表示...

  • 中部标准时间 (UTC-6)
  • 古巴标准时间 (UTC-5)
  • 中国标准时间 (UTC+8)

我还需要多说吗?

【讨论】:

    【解决方案2】:

    如果你使用 MomentJS,构造函数建议你可以这样做。 (Date String, Date Format, TimeZone)

    您可以在此处找到时区字符串:http://momentjs.com/timezone/

    在您的情况下,您正在寻找新加坡,即:Asia/Singapore

    简单示例:

    var date = moment.tz("Jay 20th 2017 8PM", "MMM Do YYYY hA", "Asia/Singapore");
    

    这里是构造函数文档的链接:http://momentjs.com/timezone/docs/

    【讨论】:

      【解决方案3】:

      您是否尝试过使用这种格式:

      new Date('1/20/2017 7:50:07 AM CST');
      

      CST 与 SGT 是同一时区

      【讨论】:

      • 大多数浏览器会将CST 解释为美国中部标准时间,而不是中国标准时间。只是不要。
      猜你喜欢
      • 2016-10-18
      • 2014-01-12
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2022-01-23
      • 2012-11-02
      • 2020-04-29
      • 1970-01-01
      相关资源
      最近更新 更多