某日,同事問到關於new Date() 函數傳參數,在火狐瀏覽器和谷歌瀏覽器控制檯運行,會獲得不一樣的結果,剛開始以爲不可能,後來實際操做才發現此陷阱json
var date = new Date('2014-07-25T23:00:00'); alert(date);
在火狐瀏覽器返回的是:瀏覽器
Date {Fri Jul 25 2014 23:00:00 GMT+0800}函數
火狐瀏覽器版本(經過navigator.userAgent輸出):"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0"spa
在谷歌瀏覽器返回的是:code
Sat Jul 26 2014 07:00:00 GMT+0800 (中國標準時間)blog
谷歌瀏覽器版本(經過navigator.userAgent輸出):"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"字符串
兩個時間對比,谷歌瀏覽器把傳進的字符串當作是UTC時間,加上了8個小時(北京處於東八區),new Date()內部調用的是Date.parse('2014-07-25T23:00:00Z')函數get
而火狐瀏覽器當作是本地時區沒有自動加上,在火狐瀏覽器中傳遞UTC格式字符串最後加上Z(Z表示zulu time,就是格林威治時間)。string
固然也能夠在UTC字符串末尾加入一個零時區的offset「+00:00」,如‘2014-07-25T23:00:00+00:00’。it
火狐瀏覽器運行結果以下:
new Date('2014-07-25T23:00:00'); Date {Fri Jul 25 2014 23:00:00 GMT+0800} new Date('2014-07-25T23:00:00Z'); Date {Sat Jul 26 2014 07:00:00 GMT+0800} new Date('2014-07-25T23:00:00+00:00'); Date {Sat Jul 26 2014 07:00:00 GMT+0800}
谷歌瀏覽器運行結果以下:
new Date('2014-07-25T23:00:00'); Sat Jul 26 2014 07:00:00 GMT+0800 (中國標準時間) new Date('2014-07-25T23:00:00Z'); Sat Jul 26 2014 07:00:00 GMT+0800 (中國標準時間) new Date('2014-07-25T23:00:00+00:00'); Sat Jul 26 2014 07:00:00 GMT+0800 (中國標準時間)
由於不知道瀏覽器加不加區時,因此建議是本身寫一個函數實現將字符串轉化爲時間格式:
//將字符串轉換爲時間格式,適用各類瀏覽器,格式如2011-08-03 09:15:11 function GetTimeByTimeStr(dateString) { var timeArr=dateStr.split(" "); var d=timeArr[0].split("-"); var t=timeArr[1].split(":"); new Date(d[0],(d[1]-1),d[2],t[0],t[1],t[2]); } //將時間轉換爲字符串格式,適用各類瀏覽器 function GetTimeStrByTime(time,stringType) { var y = time.getFullYear(); var M = time.getMonth() + 1; var d = time.getDate(); var h = time.getHours(); var m = date.getMinutes(); if(stringType==1) return y + '-' + (M < 10 ? ('0' + M) : M) + '-' + (d < 10 ? ('0' + d) : d) + " " + (h < 10 ? ('0' + h) : h) + ":" + (m < 10 ? ('0' + m) : m); return y + '/' + (M < 10 ? ('0' + M) : M) + '/' + (d < 10 ? ('0' + d) : d) + " " + (h < 10 ? ('0' + h) : h) + ":" + (m < 10 ? ('0' + m) : m); }
另外,能夠對常見的JSON格式數據進行擴輾轉換
//將json格式時間字符串規範化爲正規字符串或者時間,如"\/Date(1406217600000)\/"
function GetTimeStrByJsonStr(JsonStr) { var date = new Date(parseInt(sonStr.replace("/Date(", "").replace(")/", ""), 10)); return GetTimeStrByTime(date,2); } //時間參數爲「7月25日13時」 function getDateTimeStr(startDate,dateString) { var currenthour = dateString.split('日')[1]; if (currenthour.indexOf("時") != -1) currenthour = currenthour.split('時')[0]; if (currenthour == 0) currenthour = 24; var tempdate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()); tempdate.setTime(tempdate.getTime() + currenthour * 3600000); return GetTimeStrByTime(tempdate, 2); }