Dateオブジェクト

Dateオブジェクトが扱える範囲は、1970年1月1日の前後273,785年です。よって275755年まで扱えることになります。

オブジェクトの生成

new Date()

引数を指定しないと、現在の日時でDateオブジェクトが生成されます。

new Date( milliseconds )
new Date( year, month, day [, hour, minute, second, millisecond] )
Date - JavaScript | MDN

monthは0が起点のため、1月ならば0、12月ならば11のように指定します。

newを省略すると、引数が無視され現在の日時が文字列で返されます。

文字列からの生成 (new Date())

Date.parse( datestring )
parse - JavaScript | MDN

文字列を解析し、ミリ秒で表された数値形式 (getTime()で返される値) で結果を返します。

new Date( datestring )

コンストラクタの引数に文字列を渡した場合、それを解析しDateオブジェクトを返します。ただしその文字列は、Date.parse()メソッドで解析できる形式である必要があります。

ブラウザによる相違

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()で判定できます。

文字列への変換 (to...String)

ブラウザによる相違

次のコードを複数のブラウザで実行し、その結果を表にまとめました。

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

出力フォーマットはブラウザで異なるため、これを統一するには独自の関数で処理する必要があります。

// 出力例: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();
}

日時の取得 (get...)

分類 内容 メソッド 戻り値
日付 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 );

UNIX時間との相互変換

Dateオブジェクトは、内部的には1970年1月1日を基準とした時間で表されます。このことからUNIX時間と似通っていますが、Dateオブジェクトがミリ秒単位であることに対して、UNIX時間は秒単位で表されます。

UNIX時間からDateオブジェクトへの変換

var date = new Date( unixTimestamp * 1000 );

DataオブジェクトからUNIX時間への変換

var unixTimestamp = Math.round( date.getTime() / 1000 );

時間とUNIX時間の変換ツール