【问题标题】:moment.utc doesn't work in IE and Safarimoment.utc 在 IE 和 Safari 中不起作用
【发布时间】:2016-02-04 03:10:58
【问题描述】:

我正在尝试将Dropbox API date format 转换为日期一。在 moment.js 中,

它现在不适用于以下格式。

moment.utc("Sat, 21 Aug 2010 22:31:20 +0000")

如果在使用 utc 之前使用日期转换,它确实可以使用以下格式:

moment.utc(new Date("Sat, 21 Aug 2010 22:31:20 +0000"))

但是,我不能使用新的 Date 方法,因为它不能在其他一些情况下使用(字符串未标准化)--相关Stackoverflow 问题。

一种可能的方法是配置 Dropbox 输入格式,有没有其他方法可以让 moment.utc 工作而不使用新的 Date 方法?

非常感谢!

【问题讨论】:

    标签: javascript date browser safari momentjs


    【解决方案1】:

    Moment.js 的官方文档中,它说:

    时刻(字符串);

    从字符串创建时刻时,我们首先检查字符串是否与已知的 ISO 8601 格式匹配,如果未找到已知格式,则回退到 new Date(string)。

    因此,为了绕过新的日期陷阱并应用 ISO 8061。我可以先应用moment(),然后再应用utc()

    moment("Sat, 21 Aug 2010 22:31:20 +0000").utc()
    

    在这种情况下,虽然输入字符串的格式不一样(但都遵循 ISO 8061),但仍然可以安全处理。

    【讨论】:

      【解决方案2】:
      var d = moment.utc("20100821", "YYYYMMDD");
      var day = d.day(); // 6
      var year = d.year(); // 2010
      var month = d.month(); // 7
      var date = d.date(); // 21
      

      【讨论】:

        【解决方案3】:

        Moments.js 对您的代码发出一个很大的弃用警告。问题的要点是:如果您不提供明确的日期格式,并且您的日期格式不是 ISO 8061 类似的格式,moment.js 将放弃解析它并改用 new Date() 。充其量是易碎的。

        解决方案很简单:您知道 Dropbox 用于返回您的日期的格式。只需指定它,您的问题就解决了。类似的东西(实际格式可能需要一些调整)

        var value = moment.utc("Sat, 21 Aug 2010 22:31:20 +0000", "ddd, d MMM YYYY HH:mm:ss Z");
        

        【讨论】:

        • 但是,我还需要相同的代码来处理其他格式的日期。所以就我而言,我不能简单地在那里添加 Dropbox 格式。
        • 我只是尝试了另一种方法。 var value = moment("2010 年 8 月 21 日星期六 22:31:20 +0000").utc();它似乎工作!你怎么看呢? @Paul-Jan
        猜你喜欢
        • 2018-05-27
        • 1970-01-01
        • 2011-02-20
        • 2014-03-14
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        相关资源
        最近更新 更多