まくまくJavaScriptノート
Date オブジェクト(日時情報)の作成方法いろいろ
2018-04-04

Date オブジェクトを作成する

Date オブジェクトは、日時情報、および、UTC からのタイムオフセット情報を保持するオブジェクトです。 Date オブジェクトは、Date コンストラクタを使用して次のように生成することができます。

現在時刻で作成

var d = new Date();

ローカルタイムで年月日時分秒を指定して作成

var d = new Date(2018, 0, 31, 19, 30, 55);  // 2018年1月31日19時30分55秒

年月より後ろのパラメータは省略することができます(1日00時00分00秒とみなされる)。

昔は 1990 年を表すときに、year のパラメータに 90 という 2 桁の値を渡していましたが、現在の JavaScript 実装では 4 桁の値を扱えるようになっています。 年の指定は必ず 4 桁で行うようにしましょう。 ゲッターメソッドとしては getFullYear() が用意されています(混乱を招くので getYear() は非推奨)。

協定世界時 (UTC) で年月日を指定して作成

var d = new Date(Date.UTC(2018, 0, 31));  // 2018年1月31日
Date.UTC() 関数の戻り値はタイムスタンプ(ミリ秒)です。 上記では、このタイムスタンプを Date コンストラクタに渡しています。

時刻を表す文字列から作成(非推奨)

var d1 = new Date('1995-12-17');
var d2 = new Date('1995-12-17T03:24:00Z');

文字列から Date オブジェクトを生成する方法は、ブラウザごとに振る舞いが異なるため非推奨とされています。 文字列は自力でパースするか、何らかの外部ライブラリを使用してくださいとのこと。 どうしても使用するなら、ECMA-262 / ISO8601 - Date Time String Format で定義されているフォーマットを使用するとよいでしょう。

2018
2018-01
2018-01-31
2018-01-31T19:30
2018-01-31T19:30:55
2018-01-31T19:30:55Z
2018-01-31T19:30:55+09:00

タイムスタンプ値を得る

協定世界時 (UTC) の 1970 年 1 月 1 日 00:00:00 からの経過時間をミリ秒単位の数値で取得したいときは、Date オブジェクトの getTime() メソッドを使用します。

var d = new Date();
var timestamp = d.getTime();  //=> 1522828862750

上記のように取得したタイムスタンプから Date オブジェクトを生成することができます。

var d = new Date(timestamp);

他にも、Date クラスには、タイムスタンプを取得するためのスタティックな関数が用意されています。

var timestamp1 = Date.now();  // 現在時刻
var timestamp2 = Date.UTC(2018, 0, 31, 19, 30, 55);  // UTC で 2018年1月31日19時30分55秒
var timestamp3 = Date.parse('04 Dec 1995 00:12:00 GMT');  // 非推奨

Date クラスのこれらのスタティック関数は、必ずタイムスタンプ(ミリ秒)を返すように定義されています。 Date オブジェクトを生成したい場合は、コンストラクタ (new Date()) を使用する必要があることに注意してください。

Date オブジェクトから得られる値

Date オブジェクトには、年月日時分秒の情報を「ローカルタイム」あるいは、「協定世界時(UTC)」で取得するメソッドが用意されています。

ローカルタイムで取得(通常はこちらを使えばOK)

Date メソッド 説明
getFullYear() 「年」(4 桁までの年)
getMonth() 「月」(0-11) ※
getDate() 「日」(1-31)
getHours() 「時」(0-23)
getMinutes() 「分」(0-59)
getSeconds() 「秒」(0-59)
getMilliseconds() 「ミリ秒」(0-999)
getDay() 「曜日」(0:日曜日~6:土曜日)
getTimezoneOffset() 協定世界時からのオフセットを分で返します

※月が 1~12 ではなく、0~11 であることに注意してください(0は1月、11は12月を表します)。

協定世界時 (UTC) で取得

Date メソッド 説明
getUTCFullYear() 「年」(4 桁までの年)
getUTCMonth() 「月」(0-11) ※
getUTCDate() 「日」(1-31)
getUTCHours() 「時」(0-23)
getUTCMinutes() 「分」(0-59)
getUTCSeconds() 「秒」(0-59)
getUTCMilliseconds() 「ミリ秒」(0-999)
getUTCDay() 「曜日」(0:日曜日~6:土曜日)
2018-04-04