var start = new Date("2017-04-09T21:00:00");
輸出:星期一2017年4月10日05:00:00 GMT + 0800(+08)新加入的日期( 「」)GMT小時
它假設是:太陽2017年4月9日21:00: 00 GMT + 0800(+08)
var start = new Date("2017-04-09T21:00:00");
輸出:星期一2017年4月10日05:00:00 GMT + 0800(+08)新加入的日期( 「」)GMT小時
它假設是:太陽2017年4月9日21:00: 00 GMT + 0800(+08)
這很容易。你可以試試這個:
var start = new Date("2017-04-09T21:00:00");
start.setTime(start.getTime() + start.getTimezoneOffset()*60*1000);
console.log(start);
除了'新日期(「2017-04-09T21:00:00」)'在不同的瀏覽器中返回不同的結果。對於我而言,在Firefox 49中,上述內容返回「2017-04-09T01:00:00.000Z」。在Safari中,它返回「2017-04-09T11:00:00.000Z」。根據ECMA-262,它應被視爲本地的,因此不需要對當地時區進行調整。 – RobG
在firefox中,當您將參數傳遞給Date()構造函數時,將其視爲本地時間並返回格林威治標準時間。但是,在Chrome中,參數被視爲格林威治標準時間並返回當地時間。因此,您需要檢測瀏覽器並根據此計算時間(輸出)。但我不明白爲什麼Safari會返回意想不到的結果。 –
如果你走向瀏覽器嗅探的道路,你就處於一個痛苦的世界。只需手動解析字符串。 – RobG
有一個黃金法則,你不應該解析與Date構造函數的字符串(或Date.parse,它們是等價的解析)。
據ECMA-262,沒有一個時區的ISO 8601格式的日期應被視爲本地:
當時間區偏移量不存在,日期只有形式解釋 爲UTC時間和日期 - 時間表被解釋爲當地時間。
因此new Date("2017-04-09T21:00:00")
應在宿主時區返回2017年4月9日晚上9:00的日期。
但是,Safari 10和Chrome 57中的測試顯示「2017-04-09T21:00:00」被視爲Z或GMT + 0000。 Firefox 49奇怪地將它視爲UTC,然後以錯誤的方式調整當地時區。但是,Firefox 38正確地將其視爲本地。
所以總是手動解析字符串。使用庫或寫一個簡短的功能,例如
// Parse 2017-04-09T11:00:00.000 as local
function parseISOLocal(s) {
var b = s.split(/\D/);
return new Date(b[0], b[1]-1, b[2], (b[3]||0),
(b[4]||0), (b[5]||0), (b[6]||0));
}
var s = '2017-04-09T21:00:00.000';
console.log('Built-in parser: ' + new Date(s).toString());
console.log('parseISOLocal : ' + parseISOLocal(s).toString());
遠程'T'從' 「2017-04-09T21:00:00」' – gurvinder372
但是我使用FullCalendar比它做工精細,而把日期用'T'。 – User1911
start.toUTCString(); ? – ThatAwesomeCoder