Date.parse()

Date.parse()メソッドは、日付を表す文字列の解析を行い、January 1, 1970, 00:00:00 UTC(世界協定時 - 1970年1月1日 0時0分0秒)からのミリ秒の数値を返します。

文法

//直接の呼び出し:
Date.parse(dateString);
//暗黙的な呼び出し
new Date(dateString);
引数 説明
dateString RFC2822、 またはISO 8601の日付で表される文字列を指定します。 (他のフォーマットを使用することも出来ますが、期待する結果が得られない可能性があります。)

説明

このページで記述されているESは、 ECMAScriptを意味します。

parseメソッドは日付文字列("Dec 25, 1995"のような)を受け取り、 January 1, 1970, 00:00:00 UTC(世界協定時 - 1970年1月1日 0時0分0秒)からの経過ミリ秒を返します。 この関数は例えば、setTime()と、 Dateオブジェクトを混合して使用するような、 文字列の値から日付値を設定するような場合に便利です。

時間を表す文字列が与えられ、parseはそれを解析して時間値を返します。 parseは、例えば"Mon, 25 Dec 1995 13:30:00 GMT"のような、 RFC2822/IETFの日付文法(RFC2822 セクション 3.3)を受け付けます。 アメリカ本土の省略形のタイムゾーンを理解しますが、これは一般的では無いため、 例えば"Mon, 25 Dec 1995 13:30:00 +0430"(グリニッジ標準時の4時間30分東)のような、 タイムゾーン・オフセットを使用してください。 もしタイムゾーンが指定されず、ES5によって、 その文字列がISOフォーマットであると認識された場合はUTCであるとみなされます。

GMTとUTCは同じのものとして扱われます。

UTC協定世界時とGMTグリニッジ標準時の違い | LOCALTIME.JP 参照

ローカルのタイムゾーンは、 タイムゾーン情報を含まないRFC2822 セクション 3.3のフォーマット (または、ECMAScript 5で、ISO 8601として認識されないフォーマット)で、 引数を解釈するために使用されます。

ECMAScript 5 ISO-8601フォーマットのサポート

日付時間の文字列を、 ISO 8601フォーマットにすることも可能です。 例えば、"2011-10-10"(日付のみ)、または"2011-10-10T14:48:00"(日付と時間)を渡して、 解析させることが出来ます。 UTCのタイムゾーンは、引数がタイムゾーン情報を含まないISO 8601フォーマットを解釈するのに使用されます。 (ECMAScript 6版の下書きでは、 タイムゾーンの無い日付時間の文字列は、UTCでは無くローカルとして扱われると指定されていることに注意してください。)

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

これは、parseDateの静的メソッドであり、 Dateインスタンスのメソッドとしてではなく、Date.parse()として呼び出されるためです。

parseによってみなされるタイムゾーンの違いについて

"March 7, 2014"のような日付文字列が与えられると、 parseはローカルタイムゾーンであるとみなしますが、 "2014-03-07"のようなISOフォーマットが与えられると、それはUTCのタイムゾーンとみなされます。

そのため、それらの文字列から作成されたDateオブジェクトは、 UTCのローカルタイムゾーンを使用して設定されたシステムで無い限り異なる時間を表します。 これは、2つの等しい日付であるはずの文字列が、 変換される際のフォーマットによって異なる結果になるかもしれないことを意味します。 (この挙動はECMAScript6版で変更されたため、どちらもローカルとして扱われるようになります。)

日付フォーマットの独自実装へのフォールバックについて

ECMAScriptの仕様の状況:
もし文字列が標準フォーマットに従っていなければ、 この関数は独自実装のヒューリスティクス(heuristics)へ、 または独自実装の解析アルゴリズムへフォールバックするかもしれません。 日付として認識出来ない文字列、または不適切な要素値を含む日付のISO形式の文字列は、 Date.parseNaNを返すことになっています。

ただし、ES5版での、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の独自実装のヒューリスティクス(heuristics)は、 jsdate.cpp内で見つけることが出来ます。 ISOフォーマットに準拠しない例として"10 06 2014"の文字列は、カスタムルーティンにフォールバックされます。 また、この構文解析がどのように機能するかについては、 この概要を参照してください。

new Date('10 06 2014');

上記は2014年6月10日では無く、2014年10月6日のローカル日付として扱われます。 下記は、その他の例になります。

new Date('foo-bar 2014').toString();
// 戻り値: "Invalid Date"

Date.parse('foo-bar 2014');
// 戻り値: NaN

Date.parse()の使用例

IPOdateが既存のDateオブジェクトである場合、 次のようにして1995年8月9日(ローカル時間)を設定することが可能です。

IPOdate.setTime(Date.parse("Aug 9, 1995"));

その他の非標準日付文字列の解析例になります。

Date.parse("Aug 9, 1995");

GMT-0300のタイムゾーンであれば807937200000を返し、別のタイムゾーンであれば別の値を返します。 タイムゾーンが指定されていない且つISOフォーマットでは無い文字列であるため、 タイムゾーンはデフォルトでローカルになります。

Date.parse("Wed, 09 Aug 1995 00:00:00 GMT");

GMT(UTC)が提供されたタイムゾーンとして、ローカルタイムゾーンに関係なく、 807926400000が返されます。

Date.parse("Wed, 09 Aug 1995 00:00:00");

引数にタイムゾーンの指定子が無くISOフォーマットで無いため、ローカルとして扱われるため、 GMT-0300のタイムゾーンであれば807937200000が、他のタイムゾーンであれば別の値が返されます。

Date.parse("Thu, 01 Jan 1970 00:00:00 GMT");

GMT(UTC)が提供されたタイムゾーンとして、ローカルのタイムゾーンに関係なく、0が返されます。

Date.parse("Thu, 01 Jan 1970 00:00:00");

タイムゾーンがGMT-0400であれば14400000を返し、その他のタイムゾーンであれば別の値が返されます。 タイムゾーンが提供されておらず、ISOフォーマットの文字列では無いため、ローカルのタイムゾーンが使用されます。

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

GMT(UTC)が提供されたタイムゾーンであるため、ローカルのタイムゾーンに関係なく、 14400000が返されます。

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本
ISO 8601
フォーマット
4.0 (2.0) 9
モバイル
機能 Android Chrome for
Android
Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本 ? ? ? ?
ISO 8601
フォーマット
? ?

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。