做爲一名移動前端開發的人員,平時遇到的兼容性問題不在少數。那麼,今天就來講一下最近遇到的一個小坑(關於Android和ios在時間轉換上的差別性問題)話很少說,直接上重點。html
最近接到了一個需求,很簡單,是關於製做一個產品管理系統排序功能,因爲後端接口負責提供數據時,數據插入日期不是常見的毫秒數,而是形如"2017-08-01"的一串字符串,當我須要轉換成毫秒數用做其餘用途的時候,悲劇就發生了,詳情以下:前端
Android客戶端:ios
當使用new Date('2017-08-01 16:10:02').getTime();後端
轉換毫秒數的時候,一切正常,獲得目標數據。瀏覽器
ios客戶端:測試
當使用new Date('2017-08-01 16:10:02').getTime();htm
轉換毫秒數的時候,便報錯,信息爲"Invalid Date"。排序
該問題從表面上看,是Chrome瀏覽器和Safari對同一JavaScript代碼片斷解析不一樣形成,那麼究竟該如何處理呢?接口
通過多方探究(ps:進了百度搜谷歌,上了谷歌換了各類關鍵詞搜索),最終找到了一篇夢想中的技術博客,通過一番整理,解決方案以下。ip
緣由分析:因爲Safari瀏覽器中對"2017-08-01"的解析不正確形成上述緣由,可是Safari瀏覽器能夠完美解析"2017/08/01"格式的字符串,而通過測試,Chrome瀏覽器中對這兩種格式("2017-08-01"與"2017/08/01")的字符串均能完美解析,因此將代碼改爲以下:
new Date('2017-08-01 16:10:02').replace(/\-/g,'/').getTime();
完美的解決了上述問題。
由該問題延伸一個小細節,通常會被忽視。
new Date('2017-08-01').getTime();
new Date('2017/08/01').getTime();
上面這兩個時間轉換結果是相同的嗎?相信不少人回答是,然鵝,現實腫是殘酷的......本身打開控制檯瞅瞅吧,相信這是你接下來的表情....
大餅哥