1. ホーム
  2. ジャバスクリプト

[解決済み】Javascriptの日付オブジェクトは、常に1日ずれているのですか?

2022-03-25 17:53:59

質問

Java Scriptのアプリで、日付を以下のようなフォーマットで保存しています。

2011-09-24

上記の値を使用して新しいDateオブジェクトを作成すると(別のフォーマットで日付を取得できるように)、日付は常に1日ずれて戻ってきます。下記をご覧ください。

var date = new Date("2011-09-24");
console.log(date);

ログを表示します。

Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)

解決方法は?

東部夏時間は -4 hours であり、取得する日付の時間帯が 20 .

20h + 4h = 24h

は、2011-09-24の真夜中です。日付は 解析済み UTC (GMT)で表示されます。これは、タイムゾーンのインジケータを使用せずに日付のみの文字列を指定したためです。もし、インジケータなしの日付/時刻の文字列を指定した場合 ( new Date("2011-09-24T00:00:00") ) の場合、ローカルタイムゾーンで解析されたはずです。(歴史的には、仕様が何度も変更されたため、矛盾がありましたが、最近のブラウザでは問題ないでしょう。また、タイムゾーンインジケータを常に含めることもできます)。

正しいタイムゾーンを指定しなかっただけで、正しい日付が表示されています。

日付の値にアクセスする必要がある場合は getUTCDate() または その他の getUTC*() 機能 :

var d,
  days;
d = new Date('2011-09-24');
days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'];
console.log(days[d.getUTCDay()]);