1

「yyyy-MM-dd」形式の文字列から日付を作成していますが、何らかの理由で常に前日に作成されます。日付を「2012-10-31」に設定すると、Date オブジェクトは実際には 10 月の 31 ではなく 30 になります。たとえば、次のようになります。

var d1=new Date('2012-10-31');

これを出力します:

Tue Oct 30 2012 19:30:00 GMT-0430 (Venezuela Standard Time)

誰かがなぜこれが起こるのか説明できますか?

4

3 に答える 3

1

これを試して

var d1=new Date(2012, 10-1, 31, 0, 0 ,0);
document.write(d1);

を生成します

Wed Oct 31 2012 00:00:00 GMT-0400 (Eastern Daylight Time) 

重要なのは、引用符を削除して手動で時間を設定することです。また、「月」はゼロベースであるため、読みやすくするために1を減算します。

于 2012-10-31T13:45:40.637 に答える
1

これは、日付がローカル タイム ゾーンに基づいて文字列に変換されるために発生します。

日付変数には、実際には 10 月 31 日 0:00 UTC が含まれています。文字列に変換すると、UTC から 4:30 時間遅れた独自のタイムゾーンを使用して変換されます。

于 2012-10-31T13:48:38.733 に答える
1

これ以上パラメーターを指定しない場合、Date() は GMT+0000 でタイムスタンプを作成します。

それ以上のパラメーターを使用せずに日付を文字列に変換すると、ローカライズされた表記が使用されます。
タイムゾーンに一致する日付を作成する場合は、次のようにします。

var d1=new Date('2012-10-31 GMT-0430');
//That's what you should get
//"Wed Oct 31 2012 00:00:00 GMT-0430"

この日付を使用すると、別のタイムゾーンのブラウザーで d1.toString() を実行すると、現地時間を別のタイムゾーンの時間に変換できます。

d1.toString();
//That's what I get
//"Wed Oct 31 2012 05:30:00 GMT+0100"
于 2012-10-31T13:49:34.807 に答える