Pythonで「営業日数」をスマートに計算!differenceInBusinessDaysの代替方法3選
differenceInBusinessDays
関数は、2つの日付の間にある 営業日数 を計算します。これは、土日祝日を除いた日数を算出するもので、ビジネスシーンにおける日付計算に役立ちます。
使い方
import { differenceInBusinessDays } from 'date-fns';
const startDate = new Date(2024, 5, 13); // 2024年6月13日(月)
const endDate = new Date(2024, 5, 20); // 2024年6月20日(金)
const businessDays = differenceInBusinessDays(endDate, startDate);
console.log(businessDays); // 5 (月、火、水、木、金)
詳細
differenceInBusinessDays
は、開始日を含み、終了日を除いた 日数です。- 計算には以下のルールが適用されます。
- 土曜日と日曜日は除外されます。
- 日本の祝日は除外されます。
- オプションで、
options
オブジェクトを使用して除外する祝日をカスタマイズできます。
- 戻り値は、2つの日付間にある 営業日数 です。
differenceInBusinessDays
は、2つの Date オブジェクトを引数として受け取ります。
例
以下の例は、2024年6月13日から2024年6月20日までの間の営業日数を計算します。
import { differenceInBusinessDays } from 'date-fns';
const startDate = new Date(2024, 5, 13); // 2024年6月13日(月)
const endDate = new Date(2024, 5, 20); // 2024年6月20日(金)
const businessDays = differenceInBusinessDays(endDate, startDate);
console.log(businessDays); // 5 (月、火、水、木、金)
オプション
differenceInBusinessDays
関数は、オプションで options
オブジェクトを受け取ることができます。このオブジェクトを使用して、除外する祝日をカスタマイズできます。
import { differenceInBusinessDays } from 'date-fns';
const startDate = new Date(2024, 5, 13); // 2024年6月13日(月)
const endDate = new Date(2024, 5, 20); // 2024年6月20日(金)
const options = {
holidays: ['2024-06-19'] // 6月19日は祝日として除外
};
const businessDays = differenceInBusinessDays(endDate, startDate, options);
console.log(businessDays); // 4 (月、火、水、木)
differenceInBusinessDays
関数は、JavaScript で日付処理を行う際に役立つツールです。ビジネスシーンにおける日付計算に活用しましょう。
- 本解説にて説明していない機能やオプションについては、公式ドキュメントを参照してください。
import { differenceInBusinessDays } from 'date-fns';
const startDate = new Date(2024, 5, 13); // 2024年6月13日(月)
const endDate = new Date(2024, 5, 20); // 2024年6月20日(金)
const businessDays = differenceInBusinessDays(endDate, startDate);
console.log(businessDays); // 5 (月、火、水、木、金)
オプションで祝日を指定
import { differenceInBusinessDays } from 'date-fns';
const startDate = new Date(2024, 5, 13); // 2024年6月13日(月)
const endDate = new Date(2024, 5, 20); // 2024年6月20日(金)
const options = {
holidays: ['2024-06-19'] // 6月19日は祝日として除外
};
const businessDays = differenceInBusinessDays(endDate, startDate, options);
console.log(businessDays); // 4 (月、火、水、木)
import { differenceInBusinessDays } from 'date-fns';
const startDate = new Date(2024, 5, 13); // 2024年6月13日(月)
const endDate = new Date(2024, 5, 20); // 2024年6月20日(金)
const options = {
weekdayCount: 1 // 月曜日のみカウント
};
const businessDays = differenceInBusinessDays(endDate, startDate, options);
console.log(businessDays); // 3 (月、月、月)
differenceInBusinessDays
関数の詳細については、公式ドキュメントを参照してください。- 上記のコードはあくまで一例です。ご自身の必要に合わせてカスタマイズしてください。
手動計算
比較的単純な場合、手動で計算することも可能です。以下の手順に従って、2つの日付間にある営業日数を算出できます。
- 開始日から終了日までのすべての日にちをループします。
- 各日にちが土曜日または日曜日でないか、日本の祝日でないかを判定します。
- 上記の条件を満たす日数をカウントします。
以下のコードは、手動計算の例です。
function differenceInBusinessDays(startDate, endDate) {
let businessDays = 0;
for (let day = startDate; day <= endDate; day = addDays(day, 1)) {
if (!isWeekend(day) && !isJapaneseHoliday(day)) {
businessDays++;
}
}
return businessDays;
}
function isWeekend(date) {
const day = date.getDay();
return day === 0 || day === 6;
}
function isJapaneseHoliday(date) {
// 日本の祝日判定ロジックを実装
}
function addDays(date, days) {
const newDate = new Date(date.getTime());
newDate.setDate(date.getDate() + days);
return newDate;
}
date-fns 以外にも、日付処理に役立つライブラリは多数存在します。例えば、以下のようなライブラリが考えられます。
これらのライブラリには、"differenceInBusinessDays" と同様の機能を提供しているものがあります。
業務ロジックに合わせたカスタムロジック
具体的な業務ロジックによっては、"differenceInBusinessDays" 関数よりも柔軟なカスタムロジックが必要となる場合があります。例えば、以下のような場合が考えられます。
- 開始日または終了日が営業時間外の場合の処理
- 特定の企業独自の祝日を考慮したい場合
- 特定の曜日のみ営業日としてカウントしたい場合
このような場合は、独自のカスタムロジックを開発する必要があります。
最適な方法の選択
どの方法が最適かは、状況によって異なります。以下の点を考慮して、最適な方法を選択してください。
- 保守性
- 開発時間
- 必要な機能
- 処理の複雑さ