Date對象的瀏覽器兼容性問題

介紹一個可以解決Date對象的瀏覽器兼容問題的簡單方法。javascript

new Date()、Date.parse()方法在瀏覽器中的兼容性問題

Date在不一樣瀏覽器中對於傳入的時間字符串的格式要求是不同的。好比在chrome瀏覽器的控制檯中輸入如下內容,會獲得相應結果:java

Date.parse('2015-11-11 00:00:00')
//->1447171200000
Date.parse('2015/11/11 00:00:00')
//->1447171200000
new Date('2015-11-11 00:00:00')
//->Wed Nov 11 2015 00:00:00 GMT+0800 (CST)
new Date('2015/11/11 00:00:00')
//->Wed Nov 11 2015 00:00:00 GMT+0800 (CST)

能夠發現,chrome對於'-'和'/'分割日期的形式都是支持的,可以返回正確的毫秒數或者時間格式。chrome

下面在safari瀏覽器中輸入相同內容,查看對應結果:數組

> Date.parse('2015-11-11 00:00:00')
< NaN = $1
> Date.parse('2015/11/11 00:00:00')
< 1447171200000 = $2
> new Date('2015-11-11 00:00:00')
< Invalid Date = $3
> new Date('2015/11/11 00:00:00')
< Wed Nov 11 2015 00:00:00 GMT+0800 (CST) = $4

能夠發現,safari僅對'/'分割日期的形式支持,對'-'分割日期的形式並不支持。瀏覽器

經過以上實驗,咱們能夠觀察出chrome和safari對於不一樣格式的時間字符串的支持狀況。chrome同時支持'-'和'/'分割日期的時間字符串;safari不支持'-'分割日期的時間字符串。iphone

一個簡單有效的解決方法

下面是一個比較好的解決方案:code

var arr = "2010-03-15 10:30:00".split(/[- / :]/),
    date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
  
  console.log(date);
  //-> Mon Mar 15 2010 10:30:00 GMT+0000 (GMT Standard Time)

該方法爲先將時間字符串用split方法進行分割拼裝爲一個數組,再將每一個數組的項做爲傳參傳入new Date()方法,從而將不一樣形式的字符串轉換成有效的時間。
該方法對於全部瀏覽器生效。對象

博客文章地址:http://joebon.cc/date-cross-browser-safari-chromeip

參考資料:

http://stackoverflow.com/questions/5324178/javascript-date-parsing-on-iphone字符串

相關文章
相關標籤/搜索