タイトル: Date オブジェクト
SEOタイトル: JavaScript Date オブジェクト完全ガイド(生成 / 取得 / 計算 / フォーマット / タイムゾーン)
| この記事の要点 |
|
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 | 歴史長い。現在はメンテナンスモードで新規採用は非推奨 |