toISOString 在 Firefox 中不起作用

toISOString not working in firefox

我正在为 ISOString 创建一个新日期 -

new Date(03-13-2016 00:00).toISOString();

这在 IE 和 Chrome 中工作正常,但在 FireFox 中不行。

我试过稍微修改一下字符串 -

new Date(03-13-2016T00:00:00Z).toISOString();

然而这也失败了。我怎样才能达到预期的结果以在所有浏览器上工作?

2016-03-13T00:00:00.000Z

PS 我知道我从一个字符串开始,然后尝试使用 toISOString 创建一个字符串 - 原因是这需要在一行中处理与 UTC 的时区偏移。

当您将字符串传递给 Date 构造函数时,它会在内部调用 Date.parse 以尝试从中获取有效日期。这首先检查它是否是 the Date Time formats in the specification. If not (and both "03-13-2016 00:00" and "03-13-2016T00:00:00Z" aren't), the parse specification 之一继续说:

If the String does not conform to that format the function may fall back to any implementation-specific heuristics or implementation-specific date formats. Unrecognizable Strings or dates containing illegal element values in the format String shall cause Date.parse to return NaN.

在这种情况下,IE 和 Chrome 似乎都有适当的代码可以正确解析它,而 Firefox 则没有。你真正要解决这个问题的唯一方法是拥有一个符合规范的字符串,或者用 individual date/time component parts.

调用构造函数

如果您不介意引入库或需要更频繁地使用日期,请使用 moment.js,它具有一些非常方便的日期和时间方法,并且跨浏览器兼容。

然后您的字符串可以转换为 ISO 字符串,例如:

moment('03-13-2016 00:00', 'MM-DD-YYYY HH:mm').format();