Dateオブジェクトが扱える範囲は、1970年1月1日の前後273,785年です。よって275755年まで扱えることになります。
new Date()
引数を指定しないと、現在の日時でDateオブジェクトが生成されます。
new Date( milliseconds )
1970/1/1 UTCからmillisecondsミリ秒経過した日時と解釈されます。
new Date( year, month, day [, hour, minute, second, millisecond] )Date - JavaScript | MDN
monthは0が起点のため、1月ならば0、12月ならば11のように指定します。
newを省略すると、引数が無視され現在の日時が文字列で返されます。
Date.parse( datestring )parse - JavaScript | MDN
文字列を解析し、ミリ秒で表された数値形式 (getTime()で返される値) で結果を返します。
new Date( datestring )
コンストラクタの引数に文字列を渡した場合、それを解析しDateオブジェクトを返します。ただしその文字列は、Date.parse()メソッドで解析できる形式である必要があります。
規格 | 文字列 | IE8 | IE11 | Firefox | Chrome | あなたの ブラウザ |
---|---|---|---|---|---|---|
'2008年5月1日 2:00:00' |
× | × | × | × | ? | |
'2008/5/1 2:00:00' |
△ | ○ | ○ | ○ | ? | |
'2008/05/01 02:00:00' |
△ | ○ | ○ | ○ | ? | |
'2008/05/0102:00:00' |
△ | △ | × | × | ? | |
'2008-5-1 2:00:00' |
× | × | × | ○ | ? | |
ISO-8601 | '20080501T020000+0900' |
× | × | × | × | ? |
ISO-8601 拡張形式 | '2008-05-01T02:00:00+09:00' |
× | ○ | ○ | ○ | ? |
RFC 3339 | ||||||
'2008/5/1T2:00:00+0900' |
○ | ○ | × | × | ? | |
'2008/5/1 2:00:00+0900' |
○ | ○ | × | ○ | ? | |
'2008/5/1 2:00:00 +0900' |
○ | ○ | ○ | ○ | ? | |
RFC 822 | 'Thu, 1 May 08 02:00:00 +0900' |
× | × | × | ○ | ? |
RFC 1036 | ||||||
RFC 1123 | 'Thu, 1 May 2008 02:00:00 +0900' |
○ | ○ | ○ | ○ | ? |
RFC 2822 | ||||||
'Thu May 1 02:00:00 +0900 2008' |
× | × | ○ | ○ | ? | |
'Thu May 1 02:00:00 UTC+0900 2008' |
○ | ○ | ○ | ○ | ? | |
'Thu May 01 2008 02:00:00 GMT+0900' |
○ | ○ | ○ | ○ | ? | |
'Thu May 01 2008 02:00:00 GMT+0900 (Japan Standard Time)' |
○ | ○ | ○ | ○ | ? | |
RFC 850 | 'Thursday, 01-May-08 02:00:00 JST' |
× | × | × | × | ? |
'Wednesday, 30-Apr-08 17:00:00 GMT' |
× | × | × | ○ | ? |
IE9やFirefoxなどは解析の失敗時に、'Invalid Date'とtoString()が表現するDateオブジェクトを返します。この特殊な値はisNaN()で判定できます。
次のコードを複数のブラウザで実行し、その結果を表にまとめました。
var date = new Date( 'Thu, 01 May 2008 02:00:00' ); document.writeln( date.toString() ); document.writeln( date.toLocaleString() ); document.writeln( date.toUTCString() ); // Date document.writeln( date.toDateString() ); document.writeln( date.toLocaleDateString() ); // Time document.writeln( date.toTimeString() ); document.writeln( date.toLocaleTimeString() );
分類 | メソッド | IE6, IE7, IE8 | Firefox 3 | Chrome 4 |
---|---|---|---|---|
日付&時刻 | toString() | Thu May 1 02:00:00 UTC+0900 2008 | Thu May 01 2008 02:00:00 GMT+0900 | Thu May 01 2008 02:00:00 GMT+0900 (Japan Standard Time) |
toLocaleString() | 2008年5月1日 2:00:00 | Thu May 01 2008 02:00:00 GMT+0900 (Japan Standard Time) | ||
toUTCString() | Wed, 30 Apr 2008 17:00:00 UTC | Wed, 30 Apr 2008 17:00:00 GMT | ||
toGMTString() | ||||
日付 | toDateString() | Thu May 1 2008 | Thu May 01 2008 | |
toLocaleDateString() | 2008年5月1日 | Thursday, May 01, 2008 | ||
時刻 | toTimeString() | 02:00:00 UTC+0900 | 02:00:00 GMT+0900 | 02:00:00 GMT+0900 (Japan Standard Time) |
toLocaleTimeString() | 2:00:00 | 02:00:00 |
出力フォーマットはブラウザで異なるため、これを統一するには独自の関数で処理する必要があります。
toLocaleString()でoptions引数がサポートされるならば、それでフォーマットを指定できます。ブラウザの実装状況 - Date.prototype.toLocaleString() - JavaScript | MDN
// 出力例:2008/5/1 2:00:00
function toLocaleString( date )
{
return [
date.getFullYear(),
date.getMonth() + 1,
date.getDate()
].join( '/' ) + ' '
+ date.toLocaleTimeString();
}
時刻も独自に処理する場合には、
( '0' + date.getMinutes() ).slice( -2 )
のようにゼロパディングをすると書式が整います。
一方でprototypeプロパティを使用して、組み込みのメソッドを書き換える方法もあります。
Date.prototype.toLocaleString = function() { return [ this.getFullYear(), this.getMonth() + 1, this.getDate() ].join( '/' ) + ' ' + this.toLocaleTimeString(); }
date.toLocaleString([locales[, options]])Date.prototype.toLocaleString() - JavaScript | MDN
localesなどの引数をサポートするのは、Internet Explorer 11以降です。ブラウザの実装状況 - Date.prototype.toLocaleString() - JavaScript | MDN
new Date().toLocaleString('ja-JP', {era:'long'});
locales | 出力例 | |
---|---|---|
日本語-日本 | 'ja-JP' |
? |
中国語-中国 | 'zh-CN' |
? |
韓国語-韓国 | 'ko-KR' |
? |
英語-米国 | 'en-US' |
? |
英語-英国 | 'en-GB' |
? |
ロシア語-ロシア | 'ru-RU' |
? |
ヒンディー語-インド | 'hi-IN' |
? |
アラビア語-サウジアラビア | 'ar-SA' |
? |
アラビア語-エジプト | 'ar-EG' |
? |
言語コードに"u"を続ける形式で、langCode-u-ru-**ca-**
のように記述します。
値 | 有効な値 | |
---|---|---|
nu | 番号方式 | 'arab', 'arabext', 'bali', 'beng', 'deva', 'fullwide', 'gujr', 'guru', 'hanidec', 'khmr', 'knda', 'laoo', 'latn', 'limb', 'mlym', 'mong', 'mymr', 'orya', 'tamldec', 'telu', 'thai', 'tibt' |
ca | カレンダー | 'buddhist', 'chinese', 'coptic', 'ethioaa', 'ethiopic', 'gregory', 'hebrew', 'indian', 'islamic', 'islamicc', 'iso8601', 'japanese', 'persian', 'roc' |
hc | 時間周期 | 'h11', 'h12', 'h23', 'h24' |
locales | 出力例 | 出力例 (era:'long' ) |
---|---|---|
'th-TH-u-nu-thai' |
? | ? |
'en-GB-u-nu-thai' |
? | ? |
'en-GB-u-nu-arab' |
? | ? |
'en-GB-u-ca-islamic' |
? | ? |
'en-GB-u-ca-japanese' |
? | ? |
'ja-JP-u-ca-japanese' |
? | ? |
Internet ExplorerとEdgeは、day部分を含む形式では元号が出力されません。javascript - 和暦で年を表すjavascriptは? - スタック・オーバーフロー
options | 出力例 |
---|---|
{} |
? |
{era:'long'} |
? |
{era:'long',year:'numeric'} |
? |
{era:'long',year:'numeric',month:'numeric'} |
? |
{era:'long',year:'numeric',month:'numeric',day:'numeric'} |
? |
分類 | 内容 | メソッド | 戻り値 |
---|---|---|---|
日付 | 年 | getFullYear() | 2桁の省略形ではない、世紀を含めた数値 (たとえば1998年は、"98"ではなく"1998") |
月 | getMonth() | 0 (1月) から11 (12月) まで ※0を起点として表されており、数値との対応に注意する |
|
日 | getDate() | 1から31まで | |
曜日 | getDay() | 0 (日曜日) から6 (土曜日) まで | |
時刻 | 時 | getHours() | 0 (午前0時) から23 (午後11時) まで |
分 | getMinutes() | 0から59まで | |
秒 | getSeconds() | 0から59まで | |
ミリ秒 | getMilliseconds() | 0から999まで |
これらのメソッド名をgetUTCXxのように「UTC」をつけた形式にすると、結果を世界時で取得できます。
var date = new Date( 0 ); date.toString(); // "Thu Jan 01 1970 09:00:00 GMT+0900" date.getFullYear(); // 1970 date.getMonth(); // 0 date.getMonth(); // 1 date.getDay(); // 4 new String( '日月火水木金土' ).charAt( date.getDay() ); // "木"
date.getTime()Date.getTime - JavaScript | MDN
getTime()は、Dateオブジェクトの基準日時 (1970/1/1 0:00:00) との差をミリ秒で表します。これは2つのDateオブジェクトを比較したり、時間差の計算をするのに使えます。
Dateオブジェクトは、場合によってはgetTime()により暗黙的に数値に変換されます。たとえば、
date.getTime();
とする代わりに
+date;
としても同じ結果が返されます。このことから、2つの時間の差を求めるには
date1.getTime() - date2.getTime();
ではなく、
date1 - date2;
としても同じです。ただし数値に加算すると文字列に変換されるため、その点には注意が必要です。
var date = new Date( '2000/1/1' ); date.getTime(); // 946652400000 -date; // -946652400000 0-date; // -946652400000 0+date; // "0Sat Jan 01 2000 00:00:00 GMT+0900"
get...で取得した値に加減算し、set...で設定し直します。
// 日付を1日進める date.setDate( date.getDate() + 1 ); // 時刻を1秒戻す date.setSeconds( date.getSeconds() - 1 );
分類 | 内容 | メソッド |
---|---|---|
日付 | 年 | setFullYear() |
月 | setMonth() | |
日 | setDate() | |
時刻 | 時 | setHours() |
分 | setMinutes() | |
秒 | setSeconds() | |
ミリ秒 | setMilliseconds() |
Dateオブジェクトは、内部的には1970年1月1日を基準とした時間で表されます。このことからUNIX時間と似通っていますが、Dateオブジェクトがミリ秒単位であることに対して、UNIX時間は秒単位で表されます。
var date = new Date( unixTimestamp * 1000 );
var unixTimestamp = Math.round( date.getTime() / 1000 );