date-fnsライブラリで日付操作をマスター:豊富な「Common Helpers」関数


「sub」関数の基本構文

sub(date, duration)

引数

  • duration: 減算する期間を表すオブジェクト
  • date: 操作対象となる日付オブジェクト

「duration」オブジェクトの構成

  • days: 減算する日数
  • weeks: 減算する週数
  • months: 減算する月数
  • years: 減算する年数

具体的な使用例

以下のコード例では、2023年10月15日から3ヶ月を減算した新しい日付オブジェクトを作成しています。

const baseDate = new Date(2023, 9, 15);
const subtractedDate = sub(baseDate, { months: 3 });
console.log(subtractedDate); // 2023-07-15
  • 「sub」関数は、月の末日を適切に処理するように設計されています。例えば、2023年11月15日から1ヶ月を減算すると、2023年10月31日ではなく2023年10月15日となります。
  • 減算する期間が負の場合、日付は加算されます。
  • 過去のイベント/将来のイベントを計算する
  • 有効期限切れの日付を計算する
  • 誕生日のX日前/後を計算する
  • 特定の期間前の日付を計算する


const today = new Date();
const oneWeekAgo = sub(today, { weeks: 1 });
console.log(oneWeekAgo); // 1週間前の日付

誕生日のX日前/後を計算

const birthday = new Date(1990, 5, 24); // 生年月日
const oneYearBeforeBirthday = sub(birthday, { years: 1 });
const oneYearAfterBirthday = add(birthday, { years: 1 });
console.log(oneYearBeforeBirthday); // 1年前の誕生日
console.log(oneYearAfterBirthday); // 1年後誕生日

有効期限切れの日付を計算

const purchaseDate = new Date();
const expirationDays = 30; // 有効期限(日数)
const expirationDate = sub(purchaseDate, { days: expirationDays });
console.log(expirationDate); // 有効期限日

過去のイベント/将来のイベントを計算

const eventDate = new Date(2024, 12, 25); // イベント日
const oneMonthBeforeEvent = sub(eventDate, { months: 1 });
const oneMonthAfterEvent = add(eventDate, { months: 1 });
console.log(oneMonthBeforeEvent); // イベント1ヶ月前
console.log(oneMonthAfterEvent); // イベント1ヶ月後

複雑な期間減算

const baseDate = new Date(2023, 9, 10);
const subtractedDate = sub(baseDate, {
  years: 2,
  months: 5,
  weeks: 1,
  days: 2
});
console.log(subtractedDate); // 2021年4月8日
  • date-fnsライブラリは、豊富な機能を提供します。詳細は公式ドキュメントを参照することをお勧めします。


「sub」関数の代替手段として、単純な加算/減算操作を組み合わせて、必要な日付を計算する方法があります。例えば、以下のコードは、2023年10月15日から3ヶ月を減算した日付を、手動での計算で求めています。

const baseDate = new Date(2023, 9, 15);
const monthsToSubtract = 3;
const targetMonth = baseDate.getMonth() - monthsToSubtract;
const targetDay = baseDate.getDate();
const targetYear = baseDate.getFullYear();

if (targetMonth < 0) {
  targetMonth += 12;
  targetYear -= 1;
}

const subtractedDate = new Date(targetYear, targetMonth, targetDay);
console.log(subtractedDate); // 2023-07-15

Moment.jsライブラリの使用

date-fns以外にも、JavaScriptにおける日付操作に便利なライブラリは存在します。Moment.jsは、date-fnsと同様に豊富な機能を備えた人気ライブラリの一つです。「sub」関数に相当する機能は、Moment.jsでは「subtract」メソッドとして提供されています。

const moment = require('moment');
const baseDate = moment('2023-10-15');
const subtractedDate = baseDate.subtract(3, 'months');
console.log(subtractedDate.format('YYYY-MM-DD')); // 2023-07-15

Lodashライブラリの使用

Lodashは、JavaScriptにおける様々なユーティリティ関数を提供する包括的なライブラリです。「sub」関数に相当する機能は、Lodashには直接提供されていませんが、組み合わせることで同様の処理を実現できます。

const _ = require('lodash');
const baseDate = new Date(2023, 9, 15);
const monthsToSubtract = 3;
const subtractedDate = _.add(baseDate, -monthsToSubtract, 'months');
console.log(subtractedDate); // 2023-07-15

各方法の比較

方法利点欠点
手動での計算シンプルで分かりやすい複雑な計算になると煩雑になる
Moment.jsライブラリ豊富な機能、多くのユーザー別途ライブラリの導入が必要
Lodashライブラリ多様なユーティリティ関数「sub」関数に特化した機能ではない

「sub」関数の代替方法は状況によって異なります。シンプルな計算であれば手動での計算が効率的ですが、複雑な計算やMoment.js/Lodashライブラリを既に導入している場合は、そちらを利用する方が効率的でしょう。