JavaScript new Date()遇到的坑

永恆的記憶

1. 需求

頁面顯示倒計時天數(如:當前時間距離2020-09-01 23:59:59還有幾天)html

2. 遇到的坑

在PC端開發完畢沒有問題,上真機測試時發現,安卓也沒問題,但在iOS沒法正常計算時間。segmentfault

3. 問題

研究了一段時間發現是因爲iOS的WebKit內核沒法友好的處理時間字符串格式,也不能說是它的BUG。各類時間字符串格式能夠查看如下栗子:測試

CodePenspa

能夠用iPhone復現該問題。3d

4. 解決

改爲 2020/09/01 23:59:59 這種格式便可。code

5. 日期字符串格式

RFC2822 標準日期字符串

YYYY/MM/DD HH:MM:SS ± timezon(時區用4位數字表示)
// eg. 1997/01/01 00:00:00+0800

ISO 8601標準日期字符串

YYYY-MM-DDThh:mm:ss ± timezone(時區用HH:MM表示)
1997-01-01T00:00:00Z
// 「Z」表示UTC標準時區,即"00:00",因此這裏表示零時區的`1997年1月1日00時00分00秒`
// 轉換成位於東八區的北京時間則爲`1997年1月1日08時00分00秒`
1997-01-01T00:00:00+01:00
// 表示東一區的1997年1月1日01時00秒00分,轉換成UTC標準時間的話是1997-01-01T00:00:00Z

  • 在未指定時區的前提下,對於只精確到day的日期字符串,RFC 2822返回結果是以當前時區的零點爲準,而ISO8601返回結果則會以UTC時間的零點爲標準進行解析;
  • 可是上一條是ES5的標準而已,在ES6裏這兩種形式都會變成當前時區的零點爲基準;
  • 最後,建議使用RFC2822格式;

參考連接

相關文章
相關標籤/搜索