11

次のコードの場合:

var d = new Date("2013-07-01");
console.log(d.toDateString());

これは、2013 年 6 月 30 日 (日) を出力します。これは、入力されたものより 1 日少ないものです。オブジェクトに何が起こったのですか?実際に保存される日付は?

4

3 に答える 3

10

日付は UTC 日付として解析されますがtoDateString()、ローカル タイムゾーンでのその時刻が出力されます。

代わりにこれを試してください

var d = new Date(2013, 6, 1); //6 instead of 7 because the mont argument is  zero-based
console.log(d.toDateString());

実際に保存される日付は?

2013-07-01 00:00:00 UTC

于 2013-07-31T00:28:02.887 に答える
8

文字列から a を解析するDateと、使用しているブラウザー/ランタイムに応じて異なる結果が得られる可能性があります。いくつかのブラウザーとそれらがサポートするものをリストした表がここにあります。

しかし、一般的に、文字列 like"2013-07-01"は UTC の真夜中のように扱われます。

現地時間で解析したい場合は、"2013/07/01". しかし、それは少し奇妙です。を使用したくなるかもしれませんが"07/01/2013"、これは 1 月 7 日または 7 月 1 日と解釈される可能性があります。これらのいずれも、まだ実装固有です。

汎用の「どこでも機能する」ソリューションが必要な場合は、いくつかの異なるオプションがあります。

オプション1

解析しないでください。整数を受け入れるコンストラクターを使用します。

var d = new Date(2013,6,1);    // watch out for the zero-based month
console.log(d.toDateString());

// output:  "Mon Jul 01 2013"

このコードでは、保存される実際の UTC 時刻は、自分のタイム ゾーンによって異なります。しかし、.toDateString()その時間も考慮に入れているので、大丈夫です。

オプション 2

UTC として解析し、UTC/GMT として表示します。

var d = new Date("2013-07-01");
console.log(d.toUTCString());

// output:  "Mon, 01 Jul 2013 00:00:00 GMT"

しかし、この出力にはおそらくあなたが探していた以上のものがあるでしょう。

オプション 3

moment.jsライブラリを使用すると、必要に応じて書式設定を正確に制御できます。

var m = moment("2013-07-01", "YYYY-MM-DD");  // explicit input format
console.log(m.format("ddd MMM DD YYYY"));    // explicit output format

// output:  "Mon Jul 01 2013"

私見、これが最善の解決策です。ただし、ライブラリを使用する必要があります。

于 2013-07-31T01:07:32.897 に答える
4

オプション 4

このアプローチは非常にうまく機能し、サードパーティのライブラリは必要ありません。

    var parts ='2013-07-01'.split('-');
    var mydate = new Date(Date.UTC(parts[0],parts[1]-1,parts[2])); //please put attention to the month
于 2014-04-04T05:19:34.730 に答える