JavaScript で指定された日付が現在から指定された月数以内の未来または過去の日付かどうかを判断する関数です。
案件で「Expiry Date(有効期限)」が2年半以上残っている場合はA、残っていない場合はBという処理を実装する必要があったので、さらに少し汎用的にしてメモとして残しておきます。
/**
* 指定された日付の文字列が現在から指定された月数以内の未来または過去の日付かどうかを判断します。
*
* @param {string} dateString - 'yyyy/mm/dd' 形式の日付文字列。
* @param {number} months - 現在からの月数。
* @param {boolean} isFuture - 未来か過去かを指定する真偽値。trueなら未来、falseなら過去。
* @param {string} separator - 日付の書式が 'yyyy/mm/dd' 以外の場合は区切り文字を指定。
* @returns {boolean} 指定された月数以内であれば true、そうでなければ false を返します。
*/
function isWithinMonths(dateString, months, isFuture, separator = '/') {
// 日付文字列を 'yyyy/mm/dd' 形式からDateオブジェクトに変換
const parts = dateString.split(separator);
const year = parseInt(parts[0], 10);
const month = parseInt(parts[1], 10) - 1;
const day = parseInt(parts[2], 10);
const date = new Date(year, month, day);
// 現在の日付を取得
const currentDate = new Date();
// 指定された月数を現在日付に加算または減算
if (isFuture) {
currentDate.setMonth(currentDate.getMonth() + months);
} else {
currentDate.setMonth(currentDate.getMonth() - months);
}
// 未来か過去かに応じて、与えられた日付が指定された月数以内であるかをチェック
if (isFuture) {
return date <= currentDate;
} else {
return date >= currentDate;
}
}
const testDate = '2025/04/25';
const months = 30; // 月数(2年半)
const isFuture = true;
if (isWithinMonths(testDate, months, isFuture)) {
console.log(testDate + ' は現在から' + months + 'ヶ月以内の未来です。');
} else {
console.log(testDate + ' は現在から' + months + 'ヶ月を超える未来です。');
}