2016-03-15 62 views
1

不工作我創建一個新的日期toISOString -toISOString在Firefox

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。

+1

你傳遞開始與字符串是非標準的,所以瀏覽器是免費的感覺如何解析它。看起來FireFox覺得它無法解析它。 –

回答

1

如果你不介意拉圖書館或需要更頻繁地使用日期,使用moment.js它有一些非常方便的日期和時間方法,並且是跨瀏覽器兼容的。然後

你的字符串可轉換爲ISO字符串,如:

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

葉試圖不拉其他任何東西,但看起來這將是必要的,我會給你的解決方案一個bash,並確保我標記爲正確的,一旦測試感謝輸入。 – Ebikeneser

+1

給那個男人一個餅乾!現場@mmm!作品一種享受。 – Ebikeneser

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調用構造函數。