moment.utc在IE和Safari中不起作用

时间:2015-11-03 20:03:40

标签: javascript date browser safari momentjs

我正在尝试将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方法的情况下工作?

非常感谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

Moments.js会对您的代码发出一个很大的弃用警告。问题的关键在于:如果您没有提供明确的日期格式,并且您的日期格式不是ISO 8061类似,则moment.js会放弃解析它并依赖于新的Date()而不是。这充其量是脆弱的。

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

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

答案 2 :(得分:0)

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

  

矩(字符串);

     

当从字符串创建片刻时,我们首先检查字符串是否与已知的ISO 8601格式匹配,然后如果找不到已知格式则返回到新日期(字符串)。

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

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

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