JavaScriptで日付(年・月・日)から曜日を求める方法
本記事では、日・月・年の3つの引数を受け取り、その日付が何曜日であるかを返すJavaScript関数の実装方法を詳しく解説します。
たとえば、次のような入力が与えられた場合を考えてみましょう。
day = 15, month = 8, year = 1993
出力
この場合、関数の出力は次のようになります。
const output = 'Sunday'
サンプルコード
実際のコードは以下のとおりです。
const dayOfTheWeek = (day, month, year) => {
// JavaScriptの月は0始まりなので調整
return dayOfTheWeekJS(day, month - 1, year);
}
function dayOfTheWeekJS(day, month, year) {
const DAYS = [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
];
const DAY_1970_01_01 = 4;
let days = day - 1;
while (month - 1 >= 0) {
days += daysInMonthJS(month - 1, year);
month -= 1;
}
while (year - 1 >= 1970) {
days += daysInYear(year - 1);
year -= 1;
}
return DAYS[(days + DAY_1970_01_01) % DAYS.length];
};
function daysInMonthJS(month, year) {
const days = [
31, // 1月
28 + (isLeapYear(year) ? 1 : 0), // 2月(閏年対応)
31, // 3月
30, // 4月
31, // 5月
30, // 6月
31, // 7月
31, // 8月
30, // 9月
31, // 10月
30, // 11月
31, // 12月
];
return days[month];
}
function daysInYear(year) {
return 365 + (isLeapYear(year) ? 1 : 0);
}
function isLeapYear(year) {
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
}
console.log(dayOfTheWeek(15, 8, 1993));アルゴリズムの解説
このアプローチの核心は、「指定した日付までの総日数」を数え上げることです。基準点にはUnixエポック(1970年1月1日=木曜日)を採用します。具体的な手順は次のとおりです。
完全に経過した年数分の日数を合計する
対象年内の経過月分の日数を合計する
当月内の残りの日数を加算する
こうして求めた総日数に、1970年1月1日の曜日オフセット(木曜日=4)を加算し、7で割った余りをインデックスとして使うことで、配列DAYSから対応する曜日名を取り出します。isLeapYear()関数による閏年の判定も組み込まれているため、どの年に対しても正確な計算が可能です。
出力結果
コンソールには次のように表示されます。
Sunday
補足:組み込みのDateオブジェクトを使う方法
なお、実務開発では標準のDateオブジェクトを使うと、より簡潔に同じ結果を得られます。
const getDayOfWeek = (day, month, year) => {
const DAYS = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
// 月は0始まりのため-1する
return DAYS[new Date(year, month - 1, day).getDay()];
};
console.log(getDayOfWeek(15, 8, 1993)); // Sunday学習目的でアルゴリズムを理解したい場合は前者、実務で手早く実装したい場合は後者を選ぶとよいでしょう。
-
JavaScriptで日付の「日」を設定する方法|setDate()の使い方を解説
JavaScriptでは、DateオブジェクトのsetDate()メソッドを使うことで、日付の「日」(1〜31)を設定・変更できます。この記事では、実際のコード例と実行結果をもとに、setDate()の基本的な使い方をわかりやすく解説します。 setDate()メソッドとは setDate()は、Dateオブジェクトの「日」の値だけを変更するためのメソッドです。年や月はそのままに、日にちだけを差し替えたい場合に便利です。引数には1〜31の整数を指定しますが、範囲外の値を渡してもエラーにはならず、自動的に月をまたいだ日付へと調整されます。また、このメソッドは元のDateオブジェクト自体を書き換え
-
【JavaScript入門】日付を1日前に戻す(デクリメントする)方法をわかりやすく解説
JavaScriptでは、Dateオブジェクトが持つgetDate()メソッドとsetDate()メソッドを組み合わせることで、現在の日付から簡単に1日(あるいは任意の日数)を減算することができます。 この記事では、ボタンをクリックすると表示中の日付が1日前に戻るサンプルプログラムを紹介します。 実装例 以下のコードは、日付を1日デクリメント(前日に戻す)するシンプルなHTML+JavaScriptのプログラムです。 <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <