var start = new Date("2017-04-09T21:00:00");
出力:月2017年4月10日5時00分00秒GMT + 0800(08)新しい日付( "")を追加GMT時間
それがあることを仮定:日4月09 2017 21:00: 00 GMT + 0800(+08)
var start = new Date("2017-04-09T21:00:00");
出力:月2017年4月10日5時00分00秒GMT + 0800(08)新しい日付( "")を追加GMT時間
それがあることを仮定:日4月09 2017 21:00: 00 GMT + 0800(+08)
非常に簡単です。あなたはDateコンストラクタで文字列を解析することはありません黄金のルールがあります
var start = new Date("2017-04-09T21:00:00");
start.setTime(start.getTime() + start.getTimezoneOffset()*60*1000);
console.log(start);
'new Date(" 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()コンストラクタにパラメータを渡すと、現地時間として扱われ、緑色の平均時間が返されます。しかし、クロムではパラメータは緑の平均時間として扱われ、現地時間が返されます。したがって、あなたはブラウザを検出する必要があり、これに応じて時間(出力)を計算します。しかし、Safariが予期せぬ結果を返す理由を理解できませんでした。 –
あなたがブラウザのスニッフィングの道を歩いていると、あなたは苦痛の世界にいます。文字列を手動で解析するだけです。 – RobG
(またはDate.parseは、彼らが構文解析のための等価です):あなたはこれを試すことができます。
ECMA-262によれば、タイムゾーンなしでISO 8601形式の日付がローカルとして扱われるべきである:
オフセット時間帯が存在しない場合、日付のみの形態がUTC時間として を解釈し、タのデータれます時刻形式は現地時間として解釈されます。
したがってnew Date("2017-04-09T21:00:00")
は、ホストタイムゾーンで2017年4月9日の午後9時の日付を返す必要があります。
ただし、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
しかし、私は 'T'と日付を入れながら、それが正常に動作し、それよりもFullCalendarを使用しています。 – User1911
start.toUTCString()はどうでしょうか? ? – ThatAwesomeCoder