Dateオブジェクトは、JavaScriptで日付と時刻を扱うための組み込みオブジェクトです。現在の日時の取得、日付のフォーマット、日付の計算など、日時に関するあらゆる操作を行えます。実務ではフォーマットの扱いが特に重要です。
基本的な使い方
Dateオブジェクトはnew Date()で作成します。引数なしで現在の日時、引数ありで特定の日時を指定できます。
JavaScript
// 現在の日時
const now = new Date();
console.log(now);
// 文字列から日付を作成
const date1 = new Date("2025-06-15");
console.log(date1);
// 年月日時分秒を指定(月は0始まり)
const date2 = new Date(2025, 5, 15, 10, 30, 0); // 6月は5
console.log(date2);
// タイムスタンプ(ミリ秒)から作成
const date3 = new Date(1750000000000);
console.log(date3);実行結果
2025-06-15T10:30:00.000Z(現在の日時)
2025-06-15T00:00:00.000Z
Sun Jun 15 2025 10:30:00 GMT+0900
Fri Jun 14 2025 18:26:40 GMT+0900月の値が0始まり(1月=0、12月=11)である点は、Dateオブジェクトで最もよくあるバグの原因です。注意してください。
日付の取得とフォーマット
Dateオブジェクトから年・月・日・時・分・秒を個別に取得できます。日本語のフォーマットにはtoLocaleDateString()が便利です。
JavaScript
const date = new Date("2025-06-15T14:30:45");
// 個別に取得
console.log("年:", date.getFullYear());
console.log("月:", date.getMonth() + 1); // 0始まりなので+1
console.log("日:", date.getDate());
console.log("曜日:", date.getDay()); // 0=日, 1=月, ...6=土
console.log("時:", date.getHours());
console.log("分:", date.getMinutes());
console.log("秒:", date.getSeconds());
// フォーマット
console.log(date.toLocaleDateString("ja-JP"));
console.log(date.toLocaleString("ja-JP"));
console.log(date.toLocaleDateString("ja-JP", {
year: "numeric", month: "long", day: "numeric", weekday: "long"
}));
// YYYY-MM-DD形式を自作
function formatDate(d) {
const y = d.getFullYear();
const m = String(d.getMonth() + 1).padStart(2, "0");
const day = String(d.getDate()).padStart(2, "0");
return `${y}-${m}-${day}`;
}
console.log(formatDate(date));実行結果
年: 2025
月: 6
日: 15
曜日: 0
時: 14
分: 30
秒: 45
2025/6/15
2025/6/15 14:30:45
2025年6月15日日曜日
2025-06-15日付の計算
日付の加算・減算やDiff計算は、タイムスタンプ(ミリ秒)を使って行います。
JavaScript
// 日付の加算
const today = new Date("2025-06-15");
// 7日後
const nextWeek = new Date(today);
nextWeek.setDate(today.getDate() + 7);
console.log("7日後:", formatDate(nextWeek));
// 1ヶ月後
const nextMonth = new Date(today);
nextMonth.setMonth(today.getMonth() + 1);
console.log("1ヶ月後:", formatDate(nextMonth));
// 2つの日付の差分
const start = new Date("2025-04-01");
const end = new Date("2025-06-15");
const diffMs = end - start;
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
console.log(`差分: ${diffDays}日`);
// 年齢計算
function calcAge(birthday) {
const today = new Date();
const birth = new Date(birthday);
let age = today.getFullYear() - birth.getFullYear();
const monthDiff = today.getMonth() - birth.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {
age--;
}
return age;
}
console.log("年齢:", calcAge("1995-03-20"), "歳");
function formatDate(d) {
const y = d.getFullYear();
const m = String(d.getMonth() + 1).padStart(2, "0");
const day = String(d.getDate()).padStart(2, "0");
return `${y}-${m}-${day}`;
}実行結果
7日後: 2025-06-22
1ヶ月後: 2025-07-15
差分: 75日
年齢: 30 歳実践的な活用例
JavaScript
// 相対時間の表示(「3分前」など)
function timeAgo(date) {
const now = new Date();
const diffSec = Math.floor((now - new Date(date)) / 1000);
if (diffSec < 60) return `${diffSec}秒前`;
if (diffSec < 3600) return `${Math.floor(diffSec / 60)}分前`;
if (diffSec < 86400) return `${Math.floor(diffSec / 3600)}時間前`;
return `${Math.floor(diffSec / 86400)}日前`;
}
// 営業日かどうか判定
function isBusinessDay(date) {
const day = new Date(date).getDay();
return day !== 0 && day !== 6; // 土日以外
}
console.log("月曜は営業日:", isBusinessDay("2025-06-16"));
console.log("土曜は営業日:", isBusinessDay("2025-06-14"));実行結果
月曜は営業日: true
土曜は営業日: falseTemporal APIについて
Dateオブジェクトの問題点(月の0始まり、ミュータブル、タイムゾーンの扱いの難しさ)を解決するTemporal APIが策定中です。将来的にはDateの代替として使われる予定です。
注意点
月は0始まり(0=1月〜11=12月)です。new Date("2025-06-15")はUTC、new Date(2025, 5, 15)はローカルタイムで解釈されるため、同じ日付でも異なる時刻になる場合があります。日付文字列のパースは環境によって動作が異なるため、明示的に年月日を指定する方が安全です。
まとめ
Dateオブジェクトで日付と時刻を扱える- 月は0始まり(0=1月)に注意
toLocaleDateString()でロケールに応じたフォーマットが可能- 日付の差分はタイムスタンプ(ミリ秒)の引き算で計算する
- 将来的には
TemporalAPIが代替になる予定