過去最も近い土曜日を取得する:date-fns の previousSaturday 関数徹底解説

2024-04-02

date-fns の Weekday Helpers と previousSaturday 関数

previousSaturday 関数は、以下の引数を受け取ります。

  • date: 対象となる日付オブジェクト。Date 型、または date-fnsparse 関数で生成されたオブジェクトなど。

この関数は、date よりも過去で最も近い土曜日をDate 型で返します。

previousSaturday 関数の例

import { previousSaturday } from 'date-fns';

// 今日の日付を取得
const today = new Date();

// 過去最も近い土曜日を取得
const previousSaturdayDate = previousSaturday(today);

console.log(previousSaturdayDate); // => 2024-03-11 (土曜日)

この例では、today 変数に今日の日付を格納し、previousSaturday 関数に渡すことで、過去最も近い土曜日である 2024-03-11 を取得しています。

previousSaturday 関数のその他の使い方

  • 特定の日付から過去n番目の土曜日を取得したい場合は、subWeeks 関数と組み合わせて使用できます。
import { previousSaturday, subWeeks } from 'date-fns';

// 2週間前の土曜日を取得
const twoWeeksAgoSaturday = previousSaturday(subWeeks(today, 2));

console.log(twoWeeksAgoSaturday); // => 2024-02-25 (土曜日)
import { previousSaturday, getDay } from 'date-fns';

// 過去最も近い、日曜日の次の土曜日を取得
const previousSaturdayAfterSunday = previousSaturday(
  getDay(today) === 0 ? subWeeks(today, 1) : today
);

console.log(previousSaturdayAfterSunday); // => 2024-03-04 (土曜日)

まとめ

date-fnspreviousSaturday 関数は、過去最も近い土曜日を取得する便利な関数です。上記の例を参考に、様々なユースケースで活用してみてください。



previousSaturday 関数のサンプルコード

特定の日付から過去n番目の土曜日を取得する

import { previousSaturday, subWeeks } from 'date-fns';

// 1週間前の土曜日を取得
const oneWeekAgoSaturday = previousSaturday(subWeeks(today, 1));

// 3週間前の土曜日を取得
const threeWeeksAgoSaturday = previousSaturday(subWeeks(today, 3));

console.log(oneWeekAgoSaturday); // => 2024-03-04 (土曜日)
console.log(threeWeeksAgoSaturday); // => 2024-02-18 (土曜日)

特定の曜日から過去n番目の土曜日を取得する

import { previousSaturday, getDay, subWeeks } from 'date-fns';

// 過去最も近い、水曜日の次の土曜日を取得
const previousSaturdayAfterWednesday = previousSaturday(
  getDay(today) === 3 ? subWeeks(today, 1) : today
);

// 過去2番目に近い、月曜日の次の土曜日を取得
const previousSaturdayAfterMonday2 = previousSaturday(
  getDay(subWeeks(today, 1)) === 1 ? subWeeks(today, 2) : subWeeks(today, 1)
);

console.log(previousSaturdayAfterWednesday); // => 2024-03-04 (土曜日)
console.log(previousSaturdayAfterMonday2); // => 2024-02-25 (土曜日)

特定の期間内のすべての土曜日を取得する

import { previousSaturday, eachDayOfInterval, isSaturday } from 'date-fns';

// 過去1ヶ月間のすべての土曜日を取得
const allSaturdaysInPastMonth = eachDayOfInterval({
  start: subMonths(today, 1),
  end: today,
})
.filter(isSaturday);

console.log(allSaturdaysInPastMonth); // => [Sat Feb 04 2024, Sat Feb 11 2024, Sat Feb 18 2024, Sat Feb 25 2024, Sat Mar 04 2024, Sat Mar 11 2024]

土曜日を含む日付範囲を作成する

import { previousSaturday, addDays, isSaturday } from 'date-fns';

// 過去最も近い土曜日から、未来の2週間分の土曜日を含む日付範囲を作成
const startDate = previousSaturday(today);
const endDate = addDays(startDate, 14);

const saturdayDateRange = {
  startDate,
  endDate,
};

console.log(saturdayDateRange); // => { startDate: Sat Mar 04 2024, endDate: Sat Mar 18 2024 }


previousSaturday 関数の代替方法

手動で計算する

function previousSaturday(date) {
  const day = getDay(date);
  const diff = day === 0 ? 6 : day - 1;
  return subDays(date, diff);
}

// 例
const today = new Date();
const previousSaturdayDate = previousSaturday(today);

console.log(previousSaturdayDate); // => 2024-03-11 (土曜日)

この方法は、getDay 関数と subDays 関数を使用して、曜日と日付の差を計算することで、過去最も近い土曜日を算出しています。

moment.js ライブラリを使用する

moment().subtract(1, 'days').day(6).toDate();

// 例
const today = moment();
const previousSaturdayDate = moment().subtract(1, 'days').day(6).toDate();

console.log(previousSaturdayDate); // => 2024-03-11 (土曜日)

moment.js ライブラリを使用すると、より簡単に過去最も近い土曜日を取得することができます。

const luxon = require('luxon');

luxon.DateTime.now().minus({ days: 1 }).set({ weekday: 6 }).toJSDate();

// 例
const today = luxon.DateTime.now();
const previousSaturdayDate = luxon.DateTime.now().minus({ days: 1 }).set({ weekday: 6 }).toJSDate();

console.log(previousSaturdayDate); // => 2024-03-11 (土曜日)

Luxon ライブラリを使用する方法も、moment.js ライブラリと同様に簡単です。

これらの代替方法は、それぞれ異なる利点と欠点があります。

  • 手動で計算する方法は、最も汎用性が高い方法ですが、最も複雑でコード量も多くなります。
  • moment.js ライブラリLuxon ライブラリは、より簡単に使用できますが、これらのライブラリを事前にインストールする必要があります。

使用方法は、開発環境やプロジェクトの要件によって異なります。

その他のライブラリ

これらのライブラリを調査し、プロジェクトに最適なものを見つけてください。




date-fns sub関数:使い方、オプション、サンプルコード、その他方法まで完全解説

sub 関数は、date-fns ライブラリの Common Helpers における重要な関数の一つです。この関数は、指定された日付から指定された期間を減算するために使用されます。期間は、日数、週数、月数、年数など、さまざまな単位で指定できます。



date-fns vs moment.js vs Lodash:四半期数を月数に変換するライブラリの比較

quartersToMonths 関数は以下の引数を受け取ります。quarters: 変換したい四半期数。数値または数値に変換できる文字列で指定します。quartersToMonths 関数は、指定された四半期数に相当する月数を返します。この関数は、date-fns バージョン 2.14


date-fns vs Moment.js:JavaScriptで日付を扱うためのライブラリ徹底比較

General カテゴリ のトークンは、日付の一般的な部分を表します。以下に、よく使用されるトークンとその意味をまとめました。これらのトークンを組み合わせて、さまざまな書式設定文字列を作成できます。例えば、以下の書式設定文字列は、西暦年(4桁)


JavaScript Date APIでISO週番号制の最初の週の開始日を取得する

startOfISOWeekYear 関数は、以下の手順で動作します。入力された日付オブジェクトから年を取得します。その年の最初の ISO 週の最初の曜日 (デフォルトは月曜日) を取得します。取得した曜日を 1 月 1 日に設定した新しい日付オブジェクトを作成します。


setMonth 以外の方法 - Date オブジェクトの setMonth メソッドと moment.js ライブラリ

使い方setMonth を使用するには、以下の引数を渡す必要があります。date: 月を変更する Date オブジェクトmonth: 設定する月の番号 (0から11までの範囲)例オプションsetMonth には、以下のオプション引数を渡すことができます。



【プログラミング】date-fnsの"startOfWeekYear"関数で週番号年の最初の週を計算する方法

"date-fns" ライブラリに含まれる "Week-Numbering Year Helpers" カテゴリの "startOfWeekYear" 関数は、指定された日付を含む週番号年の最初の週の開始時刻を返します。つまり、その年の最初の週がいつ始まるかを計算します。


date-fns vs Moment.js:JavaScriptで日付を扱うためのライブラリ徹底比較

General カテゴリ のトークンは、日付の一般的な部分を表します。以下に、よく使用されるトークンとその意味をまとめました。これらのトークンを組み合わせて、さまざまな書式設定文字列を作成できます。例えば、以下の書式設定文字列は、西暦年(4桁)


differenceInCalendarISOWeekYears 関数って?2つの日付間のISO週番号年数の差をカンタンに計算する方法

differenceInCalendarISOWeekYears 関数は、2つの日付間のISO週番号年数の差を計算します。ISO週番号年数は、ISO 8601 規格で定義された年単位の期間で、1月4日から始まり、12月31日まで続きます。使い方


【date-fns】Day Helpers: differenceInCalendarDays 関数で日付差をスマートに計算

Understanding differenceInCalendarDaysThe differenceInCalendarDays function in the "date-fns" library is designed to calculate the difference between two dates in terms of calendar days


【超便利!】date-fnsのMinute Helpersで分を操る!isThisMinute関数の実践的な使い方

isThisMinute 関数は、Minute Helpers の一つで、現在時刻が指定された分かどうかを判断します。上記の例では、isThisMinute 関数に現在時刻と比較したい分を渡しています。isThisMinute1230 は、現在時刻が 12:30 かどうかを判断します。