JavaScriptを使用してシステム開発やWebサイト制作を行う際、日付や曜日の操作は頻繁に発生する処理の一つです。
カレンダーの実装や予約システムの構築、あるいは単純なニュース更新日の表示など、曜日を取得するシーンは多岐にわたります。
かつては標準のDateオブジェクトを組み合わせて複雑なロジックを書くことが一般的でしたが、現在のJavaScriptではより簡潔で直感的な記述が可能になっています。
本記事では、JavaScriptで曜日を取得するための基礎知識から、最新の標準仕様を用いたモダンな実装方法までを詳しくご紹介します。
Dateオブジェクトを使用した基本的な曜日取得
JavaScriptで日付を扱うための最も基本的な方法は、組み込みのDateオブジェクトを利用することです。
Dateオブジェクトには、曜日を取得するための専用メソッドとしてgetDay()が用意されています。
このメソッドは、指定した日付の曜日を0から6の整数値で返却する仕組みとなっています。
getDay()メソッドの戻り値と対応表
getDay()メソッドが返す数値は、日曜日を起点としてカウントされます。
プログラム上で条件分岐を行う際や、配列から曜日名を取り出す際にこの数値を利用します。
具体的な数値と曜日の対応は以下の通りです。
| 戻り値 | 曜日 |
|---|---|
| 0 | 日曜日 |
| 1 | 月曜日 |
| 2 | 火曜日 |
| 3 | 水曜日 |
| 4 | 木曜日 |
| 5 | 金曜日 |
| 6 | 土曜日 |
基本的な実装サンプル
現在の日付から曜日番号を取得する最もシンプルなコードを確認してみましょう。
// 現在の日時を取得
const now = new Date();
// 曜日番号を取得(0〜6)
const dayIndex = now.getDay();
console.log(dayIndex);
// 実行日が月曜日の場合
1
曜日番号を日本語の文字列に変換する方法
getDay()で取得できるのは数値だけであるため、ユーザーに表示するためには「月曜日」といった文字列に変換する必要があります。
最も伝統的かつ確実な方法は、曜日名を格納した配列を用意しておく手法です。
配列を用いた変換ロジック
取得した数値(インデックス)をそのまま配列の添字として利用することで、簡単に名称を取り出すことができます。
const days = ["日", "月", "火", "水", "木", "金", "土"];
const now = new Date();
const dayName = days[now.getDay()];
console.log(`今日は${dayName}曜日です。`);
今日は月曜日です。
この方法は非常に軽量であり、表示形式を「(月)」や「Monday」など自由にカスタマイズできる点がメリットです。
Intl.DateTimeFormatによるモダンな多言語対応
現代のJavaScript開発において、特定の言語に依存しない柔軟な日付操作が求められる場合は、Intl.DateTimeFormatオブジェクトの使用が推奨されます。
このAPIを使用すれば、配列を手動で定義することなく、ブラウザのロケール設定に基づいた曜日名を直接取得できます。
Intl.DateTimeFormatの使い方
第一引数にロケール(例: ‘ja-JP’)、第二引数にオプションを指定することで、出力形式を細かく制御可能です。
const now = new Date();
// 日本語で曜日のフルネームを取得
const formatter = new Intl.DateTimeFormat('ja-JP', { weekday: 'long' });
const dayFull = formatter.format(now);
// 日本語で短い形式の曜日を取得
const shortFormatter = new Intl.DateTimeFormat('ja-JP', { weekday: 'short' });
const dayShort = shortFormatter.format(now);
console.log(dayFull);
console.log(dayShort);
月曜日
(月)
この方法の最大の利点は、多言語展開が容易であることです。
‘en-US’を指定すれば「Monday」、’fr-FR’を指定すれば「lundi」といった結果を自動で得ることができます。
次世代の標準:Temporal APIによる曜日取得
これまでのDateオブジェクトには、月の指定が0から始まる点や、ミュータブル(変更可能)であることによるバグの発生しやすさといった課題がありました。
それらを解決するために導入されたのが、次世代の日付APIであるTemporalです。
2026年現在のモダンなブラウザ環境では、このTemporal APIが標準的な選択肢となっています。
Temporal.PlainDateによる曜日取得
Temporalでは、日付のみを扱うPlainDateオブジェクトから、直接dayOfWeekプロパティにアクセスできます。
// 現在の日付を取得
const today = Temporal.Now.plainDateISO();
// 曜日を取得(1が月曜日、7が日曜日)
const dayOfWeek = today.dayOfWeek;
console.log(dayOfWeek);
// 月曜日の場合
1
従来のDate.getDay()と異なり、月曜日が1、日曜日が7となるISO 8601規格に準拠している点に注意が必要です。
この直感的な設計により、週末の判定(dayOfWeek >= 6)などがよりシンプルに記述できるようになりました。
特定の日付の曜日を判定するテクニック
「今日」ではなく、過去や未来の特定の日付の曜日を知りたい場合も多いでしょう。
その場合は、Dateオブジェクトのコンストラクタに特定の日付文字列や数値を渡してインスタンス化します。
任意の日付を指定する
以下のコードは、特定のイベント日などが何曜日であるかを算出する例です。
// 2026年12月25日の曜日を確認
const xmas = new Date('2026-12-25');
const days = ["日", "月", "火", "水", "木", "金", "土"];
console.log(`2026年のクリスマスは${days[xmas.getDay()]}曜日です。`);
2026年のクリスマスは金曜日です。
日付文字列を渡す際は、ブラウザ間の差異を避けるためにYYYY-MM-DD形式を使用することが一般的です。
ビジネスロジックでの活用例:定休日の判定
実務的な応用として、特定の曜日(例:土日)を定休日として判定するロジックを見てみましょう。
getDay()の結果が0(日)か6(土)であるかをチェックすることで、簡単に実装できます。
function isHoliday(date) {
const day = date.getDay();
// 0は日曜、6は土曜
return day === 0 || day === 6;
}
const checkDate = new Date();
if (isHoliday(checkDate)) {
console.log("本日は休業日です。");
} else {
console.log("本日は営業日です。");
}
このような判定処理は、フォームのバリデーションやスケジュールのフィルタリングなどで頻繁に利用されます。
まとめ
JavaScriptで曜日を取得する方法は、用途や対象環境によっていくつかの選択肢があります。
最も基礎的なDate.getDay()は、軽量な処理や単純な配列変換に適しています。
グローバル展開が必要なプロジェクトでは、Intl.DateTimeFormatを活用することで、スマートに多言語対応を実現できるでしょう。
そして、これからのスタンダードとなるTemporal APIは、より堅牢でエラーの少ないコードを書くための強力な武器となります。
それぞれの特徴を理解し、プロジェクトの要件に合わせた最適な手法を選択してください。
最新のJavaScriptの機能を活用することで、日付操作に伴う複雑さを軽減し、メンテナンス性の高いコードを維持していきましょう。
