不Shawn樣的部落格

寫寫程式相關的學習筆記

0%

在SAFARI瀏覽器使用NEW DATE()出現RANGEERROR INVALID DATE VALUE

因為先前有個新專案快要上線,PM就開始猛測試,發現某個表單用了iPhone的Safari去送出就會失敗,但Android手機的其他人用Chrome卻可以送出表單。

其實只要是Safari,手機遇到的問題,Mac上也會有

不過我們沒有iPhone的轉接線可以轉接到電腦上看到底是報了什麼錯,只好不斷改code不斷寫alert不斷部署上去,用iPhone看看alert出來的資料,最後發現有個日期的部分印出來是NaN,而該日期是透過new Date()產生的,因此就開始往new Date()跟Safari的方向研究。

(題外話,其實不用那麼蠢的說…因為我一開始聽信PM說Mac上的Safari沒問題,唯獨iPhone的Safari有問題,我只好一直不斷部署上去再用iPhone去測,最後當我找到問題時我才想到用一下Mac上的Safari去測一下,發現其實也是有問題的,如果我早點用Mac的Safari測,就可以馬上看到報錯是什麼,免去我抓問題抓那麼久Q”Q)

慎用new Date()

底下開始正式說明問題。我的需求是希望塞一個特定的日期時間進去new Date(),去產出一個我想要的date像是這樣new Date('2013-05-13 03:00'),但這樣的寫法在Chrome或其他瀏覽器上產出來的值確實是正確的date格式。

可到了Safari上就會轉不過去了,上網查到這篇,必須要寫成new Date('2013-05-13T03:00:00Z'),Safari才會順利讓new Date()產出我要的date格式。

Safari對於new Date()使用較嚴格的感覺

總之是Safari比較嚴格,會需要你輸入new Date()裡面輸入的值要非常完整,至於Chrome之類其他的瀏覽器就沒那麼嚴格,輸入大致的時間格式就可以清楚幫你轉換了。

結論:日後有日產出特定date格式的需求,盡量以moment套件來做

但其實要補中間的T跟後面的Z我覺得有點麻煩,最後是直接以moment套件寫moment('2013-05-13 03:00').toDate(),去產出我要的date格式,而以moment套件產出的date經實測確實可以讓Safari或Chrome等等瀏覽器都可以正常運行。