プログラミング初心者でも安心!date-fns「eachWeekendOfInterval」の使い方を徹底解説


使い方

import eachWeekendOfInterval from 'date-fns/eachWeekendOfInterval';

const startDate = new Date(2024, 5, 1); // 2024年6月1日
const endDate = new Date(2024, 6, 30); // 2024年6月30日

const weekends = eachWeekendOfInterval({ start: startDate, end: endDate });

console.log(weekends);
// [
//   Sat Jun 01 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 02 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 08 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 09 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 15 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 16 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 22 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 23 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 29 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 30 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時)
// ]

出力

上記の例では、startDateendDate の間にあるすべての週末が weekends 配列に返されます。各要素は、その週末の最初の瞬間を表す Date オブジェクトです。

オプション

eachWeekendOfInterval 関数は、オプションのパラメータを受け取ることができます。これらのパラメータを使用して、結果をさらに制御できます。

  • excludedDates: 特定の日付を結果から除外します。
  • firstDayOfWeek: 週の最初の曜日を設定します。デフォルトは 0(日曜日)です。
const weekends = eachWeekendOfInterval({
  start: startDate,
  end: endDate,
  firstDayOfWeek: 1, // 月曜日を週の最初の日に設定
  excludedDates: [new Date(2024, 6, 2)], // 6月2日を結果から除外
});

console.log(weekends);
// [
//   Sat Jun 01 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 02 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 08 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 09 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 15 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 16 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 22 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 23 2024 00:


特定の月のすべての週末を取得する

import eachWeekendOfInterval from 'date-fns/eachWeekendOfInterval';

const startDate = new Date(2024, 5, 1); // 2024年6月1日
const endDate = new Date(2024, 5, 31); // 2024年6月31日

const juneWeekends = eachWeekendOfInterval({ start: startDate, end: endDate });

console.log(juneWeekends);
// [
//   Sat Jun 01 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 02 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 08 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 09 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 15 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 16 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 22 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 23 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 29 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 30 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時)
// ]
import eachWeekendOfInterval from 'date-fns/eachWeekendOfInterval';

const startDate = new Date(2024, 5, 1); // 2024年6月1日
const endDate = new Date(2024, 5, 31); // 2024年6月31日

const fridayWeekends = eachWeekendOfInterval({
  start: startDate,
  end: endDate,
  firstDayOfWeek: 1, // 月曜日を週の最初の日に設定
  excludedDates: [new Date(2024, 6, 2)], // 6月2日を結果から除外
});

console.log(fridayWeekends);
// [
//   Sat Jun 01 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Fri Jun 07 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 08 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Fri Jun 14 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 15 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Fri Jun 21 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 22 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Fri Jun 28 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 29 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時)
// ]


for ループを使用する

import isWeekend from 'date-fns/isWeekend';

const startDate = new Date(2024, 5, 1); // 2024年6月1日
const endDate = new Date(2024, 6, 30); // 2024年6月30日

const weekends = [];

for (let currentDate = startDate; currentDate <= endDate; currentDate = addDays(currentDate, 1)) {
  if (isWeekend(currentDate)) {
    weekends.push(currentDate);
  }
}

console.log(weekends);
// [
//   Sat Jun 01 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 02 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 08 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 09 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 15 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 16 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 22 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 23 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 29 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 30 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時)
// ]
import isWeekend from 'date-fns/isWeekend';

const startDate = new Date(2024, 5, 1); // 2024年6月1日
const endDate = new Date(2024, 6, 30); // 2024年6月30日

const dates = generateDatesRange(startDate, endDate); // startとendの間のすべての日の配列を生成

const weekends = dates.filter(isWeekend);

console.log(weekends);
// [
//   Sat Jun 01 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 02 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 08 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 09 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 15 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 16 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 22 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 23 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sat Jun 29 2024 00:00:00 GMT+0200 (夏時間ヨーロッパ標準時),
//   Sun Jun 30 2024 00:00:00