日時が指定範囲の日時であるか判定

日時が指定範囲の日時であるか判定するには、次のような方法で実装できます。

関数定義

var isWithinRangeDays = function(targetDate, rangeStartDate, rangeEndDate) {
	var targetDateTime, rangeStartTime, rangeEndTime,
	    startFlag = false endFlag = false;

	if (!targetDate) return false;

	var isArray = function(array) {
		return (Object.prototype.toString.call(array) === '[object Array]') ? true : false;
	};

	// 日時をミリ秒で取得する関数
	var getDateTime = function(dateObj) {
		if (!dateObj) return;

		if (typeof dateObj.getTime !== 'undefined') {
			return dateObj.getTime();
		} else if (isArray(dateObj)) {
			if (dateObj.length === 3) {
				return new Date(dateObj[0], Number(dateObj[1]) - 1, dateObj[2]).getTime();
			} else {
				return new Date(dateObj[0], Number(dateObj[1]) - 1, dateObj[2], dateObj[3], dateObj[4], dateObj[5]).getTime();
			}
		}

		return;
	};

	targetDateTime = getDateTime(targetDate);
	rangeStartTime = getDateTime(rangeStartDate);
	rangeEndTime   = getDateTime(rangeEndDate);

	if (!targetDateTime) return false;

	if (rangeStartDate) {
		if (rangeStartTime && targetDateTime >= rangeStartTime) {
			startFlag = true;
		}
	} else {
		startFlag = true;
	}

	if (rangeEndDate) {
		if (rangeEndTime && targetDateTime <= rangeEndTime) {
			endFlag = true;
		}
	} else {
		endFlag = true;
	}

	if (startFlag && endFlag) return true;

	return false;
};

使い方

引数名 説明
第一引数
必須
targetDate Date|number[] 調べる日付
第二引数
必須
rangeStartDate Date|number[] 範囲の開始日時
第三引数
必須
rangeEndDate Date|number[] 範囲の終了日時

配列で指定する場合は、[年, 月, 日]または[年, 月, 日,時 ,分 , 秒]で指定します。

戻り値

範囲内であればtrue、そうだなければfalseを返します。

var result1 = isWithinRangeDays([2001, 3, 4], [2001, 3, 1], [2001, 3, 5]),
	result2 = isWithinRangeDays([2001, 3, 4, 10, 0, 0], [2001, 3, 1], [2001, 3, 5]),
	result3 = isWithinRangeDays(new Date(), new Date(2001, 2, 1), new Date());

alert(result1);
alert(result2);
alert(result3);

JavaScript逆引きリファレンス一覧へ戻る