4.

JavaScript Date オブジェクト完全ガイド(生成 / 取得 / 計算 / フォーマット / タイムゾーン)

編集
この記事の要点
  • Date は JavaScript の組み込みオブジェクトで、日付と時刻を扱う
  • 内部表現は UTC 1970-01-01 00:00:00 からのミリ秒(エポック)
  • 生成: new Date() / new Date(2026, 5, 11) / new Date("2026-06-11T10:00:00Z")
  • 取得: getFullYear() / getMonth()0 始まり) / getDate() / getDay()
  • フォーマットは標準 API が貧弱なため、Intl.DateTimeFormat または日付ライブラリ(Day.js / date-fns)の利用が一般的

Date オブジェクトとは

Date は JavaScript の組み込みオブジェクトで、日付と時刻を扱うためのものです。内部的には UTC 1970-01-01 00:00:00(エポック)からの経過ミリ秒として 1 つの数値で持っています。

Date の生成

// 現在日時
const now = new Date();

// ミリ秒指定(エポック)
const d1 = new Date(0);                  // 1970-01-01T00:00:00.000Z

// 年月日時分秒指定(ローカルタイム / 月は 0 始まり)
const d2 = new Date(2026, 5, 11);        // 2026-06-11 00:00 ローカル
const d3 = new Date(2026, 5, 11, 10, 30); // 2026-06-11 10:30 ローカル

// ISO 8601 文字列(UTC として解釈)
const d4 = new Date("2026-06-11T10:00:00Z");

// "YYYY-MM-DD" は UTC として解釈される(実装依存だが ISO 仕様)
const d5 = new Date("2026-06-11");

月だけ 0 始まり(0 = 1 月、11 = 12 月)という独特な仕様に注意。

値の取得

メソッド意味戻り値の範囲
getFullYear()年(4 桁)2026
getMonth()0 〜 11
getDate()1 〜 31
getDay()曜日0 (日) 〜 6 (土)
getHours()0 〜 23
getMinutes() / getSeconds()分 / 秒0 〜 59
getMilliseconds()ミリ秒0 〜 999
getTime() / valueOf()エポックミリ秒整数
getTimezoneOffset()UTC との分単位の差(符号はUTC - ローカル例: JST なら -540

UTC 版の getUTCFullYear() / getUTCMonth() ... もあります。

値の更新

const d = new Date(2026, 5, 11);

d.setFullYear(2027);
d.setMonth(11);       // 12 月
d.setDate(31);
d.setHours(23, 59, 59);

// 範囲を超える値は自動繰り上げ
const x = new Date(2026, 0, 32);   // → 2026-02-01
const y = new Date(2026, 5, 11);
y.setDate(0);                      // → 2026-05-31(前月末)

日付の計算

// 1 週間後
const next = new Date();
next.setDate(next.getDate() + 7);

// 1 時間後(ミリ秒で計算)
const oneHourLater = new Date(Date.now() + 60 * 60 * 1000);

// 差分(日数)
const a = new Date("2026-06-11");
const b = new Date("2026-06-20");
const diffDays = (b - a) / (1000 * 60 * 60 * 24);  // 9

フォーマット

標準 API はクセが強いので、Intl.DateTimeFormat を使うのが推奨です。

const d = new Date("2026-06-11T10:30:00");

// デフォルト(ロケール依存)
d.toString();          // "Thu Jun 11 2026 10:30:00 GMT+0900 (...)"
d.toISOString();       // "2026-06-11T01:30:00.000Z"  (UTC)
d.toLocaleString("ja-JP");  // "2026/6/11 10:30:00"

// Intl.DateTimeFormat: 自由に整形
new Intl.DateTimeFormat("ja-JP", {
  year:   "numeric",
  month:  "2-digit",
  day:    "2-digit",
  hour:   "2-digit",
  minute: "2-digit",
  weekday:"short",
}).format(d);
// "2026/06/11(木) 10:30"

静的メソッド

メソッド用途
Date.now()現在のエポックミリ秒(Date 生成より高速)
Date.parse(str)文字列を解釈してエポックミリ秒に変換
Date.UTC(y,m,d,...)UTC 基準でエポックミリ秒を作る

タイムゾーンの注意

  • Date は内部的には UTC ミリ秒だが、表示 / 入出力時に実行環境のタイムゾーンが適用される
  • new Date("2026-06-11")UTC 解釈new Date(2026, 5, 11)ローカル解釈と挙動が異なる
  • サーバとブラウザで TZ が異なるとバグの温床。YYYY-MM-DDTHH:mm:ss±hh:mm のように TZ 込みの ISO 文字列でやり取りするのが安全

新しい Temporal API

Date の問題点(mutability・タイムゾーン・閏年計算など)を解決するため、ECMAScript には Temporal という新仕様が用意されています。一部ブラウザで利用可能で、今後の主流になる見込みです。

// Temporal は polyfill / 一部環境で利用可
const today = Temporal.Now.plainDateISO();         // 2026-06-11
const next  = today.add({ days: 7 });              // 2026-06-18
const days  = today.until("2026-12-31").days;       // 残日数

ライブラリ

ライブラリ特徴
Day.js軽量(2KB)。Moment 互換 API。導入が簡単
date-fns関数型 API、tree-shake しやすい
Luxonタイムゾーン / 国際化に強い。Moment 後継
Moment.js歴史長い。現在はメンテナンスモードで新規採用は非推奨

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. JSON
  2. Array
  3. Boolean(JavaScriptビルトイン)
  4. Date オブジェクト
  5. Math (JS ビルトイン)
  6. Number
  7. Object(JavaScriptビルトイン)
  8. RegExp

最近更新/作成されたページ