Chrome和Firefox瀏覽器執行new Date() 函數傳參數獲得不一樣結果的陷阱

某日,同事問到關於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); }
相關文章
相關標籤/搜索