プログラミング初心者でも安心!date-fnsの「isSunday」関数で、今日が日曜日かどうかを判定してみよう


date-fnsライブラリは、JavaScriptで日付を操作するための便利なツールを提供しています。Weekday Helpersと呼ばれる機能には、曜日判定に特化したヘルパー関数群が含まれています。その中でも、「isSunday」関数は、指定された日付が日曜日かどうかを判定するものです。

この解説では、「isSunday」関数の詳細な動作と、具体的なプログラミング例を用いた分かりやすい説明を提供します。

「isSunday」関数は、単一の日付オブジェクトを引数として受け取り、それが日曜日かどうかを真偽値で返します。

構文

isSunday(date)

引数

  • date: 曜日判定対象の日付オブジェクト

返り値

  • boolean: 日曜日であればtrue、そうでなければfalse

具体的な動作

「isSunday」関数は内部的に、引数として渡された日付の曜日番号を取得します。曜日番号は、0を日曜日、1を月曜日、... 6を土曜日として表現します。

この曜日番号を元に、「isSunday」関数は以下の判定を行います。

  1. 曜日番号が0であれば、日曜日であるためtrueを返す
  2. 曜日番号が0以外であれば、日曜日ではないためfalseを返す

プログラミング例

import { isSunday } from 'date-fns';

const today = new Date();
const isTodaySunday = isSunday(today);

console.log(isTodaySunday); // 今日が日曜日かどうかを判定

上記の例では、isSunday関数を使って今日が日曜日かどうかを判定しています。

  • 例えば、isWeekend関数と組み合わせて、土日判定を行うこともできます。
  • 「isSunday」関数は、単独で実行しても問題ありませんが、他のWeekday Helpers関数と組み合わせて利用することもできます。
import { isSunday, isWeekend } from 'date-fns';

const today = new Date();
const isTodayWeekend = isWeekend(today);

console.log(isTodayWeekend); // 今日が土日かどうかを判定

date-fnsのWeekday Helpersにおける「isSunday」関数は、指定された日付が日曜日かどうかを判定するシンプルな関数です。



import { isSunday } from 'date-fns';

const targetDate = new Date(2024, 5, 19); // 2024年6月19日
const isTargetSunday = isSunday(targetDate);

console.log(isTargetSunday); // 2024年6月19日が日曜日かどうかを出力

過去・現在・未来における日曜日を判定

import { isSunday } from 'date-fns';

const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1); // 昨日を取得
const today = new Date(); // 今日を取得
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1); // 明日を取得

const isYesterdaySunday = isSunday(yesterday);
const isTodaySunday = isSunday(today);
const isTomorrowSunday = isSunday(tomorrow);

console.log(`昨日が日曜日かどうか: ${isYesterdaySunday}`);
console.log(`今日が日曜日かどうか: ${isTodaySunday}`);
console.log(`明日が日曜日かどうか: ${isTomorrowSunday}`);

特定の月のすべての日曜日を判定

import { isSunday, eachDayOfMonth } from 'date-fns';

const targetMonth = 6; // 6月
const targetYear = 2024; // 2024年

const sundays = [];

eachDayOfMonth(new Date(targetYear, targetMonth - 1), (day) => {
  if (isSunday(day)) {
    sundays.push(day);
  }
});

console.log(sundays); // 2024年6月のすべての日曜日を出力

特定の期間におけるすべての日曜日を判定

import { isSunday, eachDayOfInterval } from 'date-fns';

const startDate = new Date(2024, 5, 1); // 開始日
const endDate = new Date(2024, 6, 30); // 終了日

const sundays = [];

eachDayOfInterval({ start: startDate, end: endDate }, (day) => {
  if (isSunday(day)) {
    sundays.push(day);
  }
});

console.log(sundays); // 2024年6月1日から30日までのすべての日曜日を出力
import { isSunday, getFirstDayOfMonth, getLastDayOfMonth } from 'date-fns';

const targetMonth = 6; // 6月
const targetYear = 2024; // 2024年

// 特定曜日の最初の日曜日を取得
const firstSunday = getFirstDayOfMonth(new Date(targetYear, targetMonth - 1));
while (!isSunday(firstSunday)) {
  firstSunday.setDate(firstSunday.getDate() + 1);
}

// 特定曜日の最後の日曜日を取得
const lastSunday = getLastDayOfMonth(new Date(targetYear, targetMonth - 1));
while (!isSunday(lastSunday)) {
  lastSunday.setDate(lastSunday.getDate() - 1);
}

console.log(`2024年6月の最初の日曜日: ${firstSunday}`);
console.log(`2024年6月の最後の日曜日: ${lastSunday}`);


ここでは、「isSunday」の代替方法として以下の3つの方法を紹介します。

getDay()メソッドを使う

JavaScriptの標準的なDateオブジェクトには、曜日番号を取得するgetDay()メソッドが用意されています。

const date = new Date(2024, 5, 19); // 2024年6月19日
const dayNumber = date.getDay(); // 0: 日曜日, 1: 月曜日, ... 6: 土曜日

console.log(dayNumber === 0); // 2024年6月19日が日曜日かどうかを出力

上記のように、getDay()メソッドの返り値を0と比較することで、日曜日かどうかを判定できます。

switch文を使う

曜日判定をより直感的に記述したい場合は、switch文を使う方法もあります。

const date = new Date(2024, 5, 19); // 2024年6月19日

switch (date.getDay()) {
  case 0:
    console.log('日曜日');
    break;
  case 1:
    console.log('月曜日');
    break;
  // ... 省略
  case 6:
    console.log('土曜日');
    break;
  default:
    console.log('不正な日付');
}

上記のように、switch文の各ケースに曜日番号を指定することで、それぞれの曜日に合わせた処理を実行できます。

Moment.jsやLuxonなどのライブラリを使う

date-fns以外にも、Moment.jsやLuxonなどのライブラリは、曜日判定を含む様々な日付操作機能を提供しています。これらのライブラリは、date-fnsよりも多くの機能を備えている場合がありますが、導入や利用方法が複雑になる可能性があります。

それぞれの方法の比較

方法メリットデメリット
getDay()メソッドシンプルで分かりやすい曜日番号を理解する必要がある
switch直感的に記述できる記述量が多くなる可能性がある
Moment.js/Luxon機能が豊富導入や利用が複雑

どの方法が最適かは、状況や目的に応じて異なります。

シンプルな判定であればgetDay()メソッド、より直感的な記述であればswitch文、さらに高度な機能が必要であればMoment.js/Luxonといったライブラリを選択するのが良いでしょう。

ここで紹介した方法はあくまでも代替手段であり、「isSunday」関数が常に不要になるわけではありません。「isSunday」関数は、シンプルで分かりやすいコード記述に優れているため、状況によっては最適な選択となる場合もあります。