我正在为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的偏移量。
答案 0 :(得分:1)
当您将字符串传递给Date
构造函数时,它会在内部调用Date.parse
以尝试从中获取有效日期。首先检查它是否是规范中的the Date Time formats之一。如果不是("03-13-2016 00:00"
和"03-13-2016T00:00:00Z"
都不是,parse
specification继续说:
如果String不符合该格式,则该函数可以回退到任何特定于实现的启发式或特定于实现的日期格式。无法识别字符串或包含格式为String的非法元素值的日期将导致Date.parse返回NaN。
在这种情况下,IE和Chrome似乎都有适当的代码可以正确解析,而Firefox并没有。您真正要解决此问题的唯一方法是使用符合规范的字符串,或使用individual date/time component parts调用构造函数。
答案 1 :(得分:1)
如果您不介意更频繁地拉入图书馆或需要更频繁地使用日期,请使用moment.js,它具有一些非常方便的日期和时间方法,并且与浏览器兼容。
然后您的字符串可以转换为ISO字符串,如:
moment('03-13-2016 00:00', 'MM-DD-YYYY HH:mm').format();