JavaScript

Date.parse() メソッド

 編集:2022.12.05 by T.A.

協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒から指定日時(文字列)までの経過時間をミリ秒で表す数値で返します。

指定日時(文字列)を解釈できなかったり不正な日付(例えば 2015-02-31)が指定された場合 NaN を返します。

構文

直接の呼び出し:

Date.parse(dateString)

暗黙の呼び出し:

new Date(dateString)
dateString または(派生の)ISO 8601 の日付を表す文字列。(他の書式も使用することができますが、結果は実装依存になります。)
戻り値

数値。このメソッドに与えられた日付を表す文字列の解釈により取得される日付。引数に正しい値が与えられない場合、NaN を返します。

解説

parse() メソッドは、日時の文字列(例えば "2011-10-10T14:48:00")を取り、協定世界時(UTC)での 1970 年 1 月 1 日 0 時 0 分 0 秒からのミリ秒単位の経過時間を表す数値を返します。

この関数は、例えば setTime() メソッドと Date オブジェクトを組み合わせて使う場合など、文字列値を基にして日時の値を設定するときに有用です。

日付と時刻の文字列書式

日時文字列の標準的な文字列表現は、ISO 8601 のカレンダー日付拡張形式を簡略化したものです。(詳しくは、ECMAScript 仕様書の Date Time String Format の章を参照してください。)

例えば、"2011-10-10"(日付のみの形式)、"2011-10-10T14:48:00"(日時形式)、"2011-10-10T14:48:00.000+09:00"(日時形式にミリ秒とタイムゾーンがついたもの)を渡し、解釈することができます。タイムゾーンのオフセットがない場合は、日付のみの形式では UTC 時刻と解釈され、日時形式では地方時として解釈されます。

タイムゾーン指定子は、日付文字列の解析中に引数を解釈するために使用されますが、返される値は常に、1970 年 1 月 1 日 00:00:00:00 UTC と、引数で表される時点との間のミリ秒数または NaN です。

parse() は Date の静的メソッドですので、Date のメソッドとしてではなく Date.parse() として呼び出されます。

実装依存の日付形式へのフォールバック

この節では実装依存の動作を説明しており、実装間で一貫性がない可能性があります。

ECMAScript 仕様書は、文字列が標準の書式に準拠していない場合、この関数は実装固有の検出方法や実装固有の解析アルゴリズムにフォールバックすることがあり、解釈できない文字列や ISO 書式文字列における不正な要素値を含む日付を渡すと、Date.parse() が NaN を返すと既定しています。

しかし、ECMA-262 で定義されている簡略化 ISO 書式として解釈できない日付文字列の無効な値は、ブラウザーや与えられた値に依存して、NaN を返したり返さなかったりすることがあります。次の例を参照してください。

// 不正な値を持つ 非 ISO 文字列
new Date('23/25/2014');

これは、Firefox 30 では、地方時の 2015 年 11 月 25 日として扱われ、Safari 7 では不正な値として処理されます。

しかし、文字列が ISO 書式の文字列として解釈され、不正な値を含む場合、ES5 以降の仕様に準拠するすべてのブラウザーが NaN を返します。

// 不正な値を持つ ISO 文字列
new Date('2014-25-23').toISOString();
// ES5 準拠のすべてのブラウザーが "RangeError: invalid date" を返す

SpiderMonkey の実装特有のヒューリスティックは、jsdate.cpp にあります。"10 06 2014" の文字列は、非 ISO 書式の例として挙げられており、このようにカスタム処理にフォールバックされます。この解釈の動作を説明するおよそのアウトライン も参照してください。

new Date('10 06 2014');

これは、2014 年 6 月 10 日ではなく、地方時の 2014 年 10 月 6 日 として扱われます。

他の例です。

D=new Date('foo-bar 2014').toString(); //="Invalid Date"
//→="Wed Jan 01 2014 00:00:00 GMT+0900 (日本標準時)"

D=Date.parse('foo-bar 2014'); //=NaN
//→=1388502000000
想定されるタイムゾーンの違い

この節では実装依存の動作を説明しており、実装間で一貫性がない可能性があります。

標準外の日付文字列である "March 7, 2014" を渡すと、parse() はタイムゾーンとして地方時を想定しますが、"2014-03-07" のような ISO 書式を与えると UTC をタイムゾーンとして想定します(ES5 および ECMAScript 2015 の仕様)。したがって、これらの文字列を使用して生成される Date オブジェクトは、システムが UTC の地方時に設定されていない限り、対応している ECMAScript のバージョンによって異なる時刻を表す可能性があります。つまり、同じように見える 2 つの日付文字列が、変換される文字列の形式によって 2 つの異なる値になる可能性があるということです。

Using Date.parse() の使用

以下の呼び出しはすべて 1546300800000 を返します。最初のものは ES5 によれば UTC 時刻を意味し、それ以外は ISO 日付仕様 (Z および +00:00) に従って UTC をタイムゾーンを指定しています。

D=Date.parse("2019-01-01");                    //=1546300800000
D=Date.parse("2019-01-01T00:00:00.000Z");      //=1546300800000
D=Date.parse("2019-01-01T00:00:00.000+00:00"); //=1546300800000

以下の呼び出しではタイムゾーンを指定していないので、システムの地方時で 2019-01-01 の 00:00:00 に設定されます:

D=Date.parse("2019-01-01T00:00:00"); //=1546268400000
標準外の日付文字列

この節では実装依存の動作を説明しており、実装間で一貫性がない可能性があります。

IPOdate が既存の Date オブジェクトならば、次のようにして、これを 1995 年 8 月 9 日(地方時)にセットできます:

T=new Date();
T.setTime(Date.parse('Aug 9, 1995')); //T=[object]:Wed Aug 09 1995 00:00:00 GMT+0900 (日本標準時)

それ以外の標準外の日付文字列の解釈の例を示します。

D=Date.parse('Aug 9, 1995'); //=807894000000

GMT-0300 のタイムゾーンでは 807937200000 を返し、他のタイムゾーンでは他の値を返します。タイムゾーンが指定されておらず ISO 書式でないため、既定で地方時のタイムゾーンが使用されます。

D=Date.parse('Wed, 09 Aug 1995 00:00:00 GMT'); //=807926400000

GMT (UTC) が指定されているため、地方時のタイムゾーンに関係なく 807926400000 を返します。

D=Date.parse('Wed, 09 Aug 1995 00:00:00'); //=807894000000

GMT-0300 のタイムゾーンでは 807937200000 を返し、他のタイムゾーンでは他の値を返します。引数にタイムゾーンが指定されておらず、ISO 書式ではないため、地方時として扱われます。

D=Date.parse('Thu, 01 Jan 1970 00:00:00 GMT'); //=0

GMT (UTC) のタイムゾーンが指定されているため、地方時のタイムゾーンに関係なく 0 を返します。

D=Date.parse('Thu, 01 Jan 1970 00:00:00'); //=-32400000

GMT-0400 のタイムゾーンでは 14400000 を返し、他のタイムゾーンでは他の値を返します。タイムゾーンが指定されておらず、ISO 書式ではないため、地方時のタイムゾーンが使用されます。

Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');

GMT(UTC)のタイムゾーンが指定されているため、地方時のタイムゾーンに関係なく 14400000 を返します。


テスト