JavaScript: JavaScript 日付処理
最終更新:2026-10-13
JavaScript は Date オブジェクトを使って日付と時刻を扱います。デジタル時計のようなものだと考えてください。現在時刻を表示し、任意の時刻を設定でき、2つの時刻の差を計算できます。
1. Dateオブジェクトの作成と操作
Date を作成する4つの一般的な方法:
HTML
<script>
console.log(new Date()); // 現在の日付と時刻
console.log(new Date("2025-06-19")); // 日付文字列
console.log(new Date(2025, 5, 19, 10, 30, 0)); // 年、月、日、時、分、秒
console.log(new Date(1718764800000)); // タイムスタンプ(ミリ秒)
</script>
大きな落とし穴:月はゼロ始まりです! 0 = 1月、11 = 12月です。new Date(2025, 5, 19) の 5 は6月を意味し、5月ではありません。これは Date オブジェクトで最も批判されている設計決定と言えるでしょう。
(2) 日付と時刻の取得
| メソッド | 返り値 | 備考 |
|---|---|---|
getFullYear() |
4桁の年 | getYear() は非推奨なので使わないこと |
getMonth() |
0~11 | 実際の月にするには +1 する |
getDate() |
1~31 | 月の日付 |
getDay() |
0~6 | 0 = 日曜日。月曜日ではありません! |
getHours() |
0~23 | — |
getMinutes() |
0~59 | — |
getSeconds() |
0~59 | — |
getDay() は曜日を返し、月の日付ではありません。月の日付を取得するには getDate() を使います。初心者がよく混同します。
(3) 日付と時刻の設定
対応する set メソッドがあります:setFullYear()、setMonth()、setDate()、setHours()、setMinutes()、setSeconds()。設定した値が範囲を超えると自動的に繰り上がります。
HTML
<script>
const d = new Date(2025, 5, 19);
d.setDate(32); // 自動的に7月2日になる
console.log(d.toLocaleDateString());
</script>
(4) 日付のフォーマット
| メソッド | 出力例 |
|---|---|
toLocaleDateString() |
"2025/6/19" |
toLocaleTimeString() |
"10:30:00" |
toLocaleString() |
"2025/6/19 10:30:00" |
これらのメソッドはブラウザのロケールに基づいて自動的にフォーマットされます。
(5) タイムスタンプと時間差の計算
タイムスタンプとは、1970年1月1日 00:00:00 UTC から経過したミリ秒の数です。
HTML
<script>
console.log(Date.now()); // 現在のタイムスタンプを取得
console.log(new Date().getTime()); // 上記と同じ
</script>
時間差を計算する基本アプローチ:2つのタイムスタンプを引いてミリ秒の差を求め、その後変換します。
HTML
<script>
const start = Date.now();
for (let i = 0; i < 1000000; i++) {} // 何らかの処理をシミュレート
const end = Date.now();
const diff = end - start; // ミリ秒
const diffSeconds = diff / 1000; // 秒
console.log("経過時間: " + diff + "ms(" + diffSeconds + "秒)");
</script>
(6) サンプル:現在の日付と時刻の表示
▶ 試してみよう(7) サンプル:日付情報の詳細
▶ 試してみよう(8) サンプル:カウントダウンタイマー
▶ 試してみよう(9) サンプル:日付差分計算機
▶ 試してみよう❓ よくある質問
Q
getMonth() に +1 が必要なのはなぜですか?A Java の
Date クラスがこのように設計されており、JavaScript がその「伝統」を継承しました。誰もがばかげた設計だと同意しますが、変更できません。既存のコードがこの動作に依存しすぎています。覚えましょう。Q
new Date("2025-06-19") と new Date(2025, 5, 19) には違いがありますか?A あります。文字列で解析された日付はデフォルトで UTC の午前0時になりますが、パラメータ形式はローカル時刻を使用します。表示される時刻は8時間(UTC+8 の場合)異なることがあります。時刻ではなく日付だけが必要な場合は、パラメータ形式の方が安全です。
Q 年齢はどうやって計算しますか?
A 現在の年から誕生年を引き、今年の誕生日が過ぎているかどうかを確認します。現在の月が誕生月より少ない場合、または月が同じで現在の日が誕生日より少ない場合は、年齢から1を引きます。
📖 まとめ
- Dateオブジェクトの作成:
new Date()、new Date(2024, 0, 1)、new Date("2024-01-01") - 取得メソッド:
getFullYear/getMonth/getDate/getDay/getHours/getMinutes/getSeconds - 設定メソッドでDateオブジェクトを直接変更
- 日付の書式化:
toLocaleDateString()、toISOString()、手動連結 - タイムスタンプはミリ秒。
Date.now()で現在時刻、加减算で日付計算
📝 練習問題
formatDate(date)関数を書きましょう。"YYYY-MM-DD(曜日)"の形式で文字列を返してください。月と日がゼロパディングされていることを確認してください。getAge(birthday)関数を書きましょう。日付文字列(例:"2000-03-15")を引数に取り、現在の年齢を満年数で返してください。- 「何分前」機能を構築しましょう:過去の日付が与えられた場合、「X年Xか月X日前」または「X日前」または「X時間前」を表示し、時間差に基づいて適切なフォーマットを自動選択してください。