JavaScriptで曜日を取得・変換する方法まとめ(moment.js Day.js サンプルコードあり)

はじめに

JavaScriptで日付を扱う際、曜日の取得や操作は頻繁に必要となります。しかし、実装時に具体的な書き方を思い出せないことも多いものです。本記事では、JavaScriptでの曜日の取得・操作方法を、初学者から実践者まで分かりやすく解説します。

JavaScriptで曜日を取得する方法

Dateオブジェクトを使う

JavaScriptでは、Dateオブジェクトを使って曜日を取得できます。

const today = new Date(); // 現在の日付を取得
const dayOfWeek = today.getDay(); // 曜日を数値で取得(0:日曜日, 1:月曜日, ... 6:土曜日)
console.log(dayOfWeek);

上記のコードを実行すると、曜日が 0 から 6 の数値として返されます。

曜日を文字列で取得する

数値だけでは分かりづらいため、曜日名を配列で対応させる方法が一般的です。

const days = ["日", "月", "火", "水", "木", "金", "土"];
const today = new Date();
const dayOfWeek = today.getDay();
console.log(`今日は${days[dayOfWeek]}曜日です`);

このコードを実行すると、「今日は月曜日です」のように表示されます。

指定した日付の曜日を取得する

特定の日付の曜日を調べるには、Dateオブジェクトに日付を指定します。

const targetDate = new Date("2024-12-25"); // クリスマスの日付を設定
const dayOfWeek = targetDate.getDay();
const days = ["日", "月", "火", "水", "木", "金", "土"];
console.log(`2024年12月25日は${days[dayOfWeek]}曜日です`);

日付を加算・減算して曜日を取得する

DateオブジェクトのsetDate()メソッドを使うと、日付の加算・減算ができます。

const today = new Date();
const days = ["日", "月", "火", "水", "木", "金", "土"];

// 3日後の曜日を取得
const futureDate = new Date();
futureDate.setDate(today.getDate() + 3);
console.log(`3日後は${days[futureDate.getDay()]}曜日です`);

// 7日前の曜日を取得
const pastDate = new Date();
pastDate.setDate(today.getDate() - 7);
console.log(`1週間前は${days[pastDate.getDay()]}曜日です`);

Intl.DateTimeFormatを使った曜日の取得

Intl.DateTimeFormatを使うと、ロケールに応じた形式で曜日を取得できます。

const today = new Date();
const formatter = new Intl.DateTimeFormat('ja-JP', { weekday: 'long' });
console.log(formatter.format(today));

このコードを実行すると、「日曜日」「月曜日」などのフル表記で曜日が表示されます。

曜日を英語で取得する方法

英語での曜日表示には、配列を使うかIntl.DateTimeFormatを利用します。

const daysEn = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
const today = new Date();
console.log(`Today is ${daysEn[today.getDay()]}`);

または、Intl.DateTimeFormatを使う方法もあります。

const formatter = new Intl.DateTimeFormat('en-US', { weekday: 'long' });
console.log(formatter.format(new Date()));

曜日を動的に変更する方法

特定の曜日を求める処理、例えば「次の金曜日の日付を取得する」場合は、次のように実装できます。

function getNextDayOfWeek(date, dayOfWeek) {
  const resultDate = new Date(date);
  resultDate.setDate(date.getDate() + ((dayOfWeek + 7 - date.getDay()) % 7 || 7));
  return resultDate;
}

const today = new Date();
const nextFriday = getNextDayOfWeek(today, 5); // 5: 金曜日
console.log(`次の金曜日は ${nextFriday.toLocaleDateString()} です`);

moment.jsを使った曜日取得(※非推奨)

かつてはmoment.jsがよく使用されていましたが、現在は推奨されていません。ただし、使用する場合の曜日取得方法は以下の通りです。

const moment = require('moment');
console.log(moment().format('dddd')); // 英語の曜日
console.log(moment().locale('ja').format('dddd')); // 日本語の曜日

▼moment.js
https://momentjs.com/

Day.jsを使った曜日取得

moment.jsの代替として人気のDay.jsを使用する方法もあります。

const dayjs = require('dayjs');
require('dayjs/locale/ja');

dayjs.locale('ja');
console.log(dayjs().format('dddd')); // 日本語の曜日
console.log(dayjs().locale('en').format('dddd')); // 英語の曜日

▼Day .js
https://day.js.org/

まとめ

JavaScriptでの曜日の扱い方を紹介しました。

  • getDay()で曜日を数値取得(0:日曜日~6:土曜日)
  • 配列を使って日本語や英語の曜日を取得
  • Intl.DateTimeFormatでロケール対応した曜日を取得
  • setDate()を使って曜日を加算・減算
  • 次の特定の曜日の日付を求める関数を実装

JavaScriptで曜日を扱う基本をしっかり理解しましょう!