new Date() 時間轉換在IOS中日期多了一天

昨晚收到一個用戶反饋,明明是2019年10月30號充值,結果充值成功後顯示的充值時間是10月31號。直接讓用戶懷疑人生,彷彿穿越到了第二天(這句話只是開個玩笑)。解決bug過程中首先發現只有蘋果手機有這個問題。後端返回的時間是‘2019-10-30T20:41:15.603’,前端用的是new Date()去轉換。轉換後getDate()出日期在ios上直接多了一天,30號變成31號。(廢話時間結束)

問題查找分析:

1.ios不兼容javascript 時間 new Date('xxxx-xx-xx') 解決方案,需要把‘-’替換成‘/’(導致ios最終輸出結果 NaN)

2.我們的後端返回了毫秒在ios上newDate()格式化會有問題。(導致ios最終輸出結果NaN,爲什麼會導致我還沒研究)

3.時區問題在控制檯打印第一種格式和第二種格式差了8小時,我一看這8小時剛好是蘋果手機和其它終端上顯示時間的時間差。在蘋果上沒有指定用+0800的時區格式,他就默認用了第一種時區格式。

4.ios上需要把T字符替換成空格(不然還是NaN)

解決方案

var time ='2019-10-30T20:41:15.603'

var d = new Date(time.substr(0,time.length-4)..replace(/T/g, ' ').replace(/-/g, '/') + '+0800')

d.getDate() 就是30號而不是31號了。

總結: 追根到底就是時區問題導致了8小時時差最終導致了日期加了一天 

反正標準的格式就是要 var d = new Date('2019-10-30 20:41:15+0800')這樣的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章