blob: 24d2f898f174d69a247b7261d6b52f2b99ddecf7 [file] [log] [blame]
/**
* Module exports.
*/
module.exports = timeRange;
/**
* True during (or between) the specified time(s).
*
* Even though the examples don't show it, this parameter may be present in
* each of the different parameter profiles, always as the last parameter.
*
*
* Examples:
*
* ``` js
* timerange(12)
* true from noon to 1pm.
*
* timerange(12, 13)
* same as above.
*
* timerange(12, "GMT")
* true from noon to 1pm, in GMT timezone.
*
* timerange(9, 17)
* true from 9am to 5pm.
*
* timerange(8, 30, 17, 00)
* true from 8:30am to 5:00pm.
*
* timerange(0, 0, 0, 0, 0, 30)
* true between midnight and 30 seconds past midnight.
* ```
*
* timeRange(hour)
* timeRange(hour1, hour2)
* timeRange(hour1, min1, hour2, min2)
* timeRange(hour1, min1, sec1, hour2, min2, sec2)
* timeRange(hour1, min1, sec1, hour2, min2, sec2, gmt)
*
* @param {String} hour is the hour from 0 to 23. (0 is midnight, 23 is 11 pm.)
* @param {String} min minutes from 0 to 59.
* @param {String} sec seconds from 0 to 59.
* @param {String} gmt either the string "GMT" for GMT timezone, or not specified, for local timezone.
* @return {Boolean}
*/
function timeRange () {
var args = Array.prototype.slice.call(arguments),
lastArg = args.pop(),
useGMTzone = (lastArg == "GMT"),
currentDate = new Date();
if (!useGMTzone) { args.push(lastArg); }
var noOfArgs = args.length,
result = false,
numericArgs = args.map(function(n) { return parseInt(n) });
// timeRange(hour)
if (noOfArgs == 1) {
result = getCurrentHour(useGMTzone, currentDate) == numericArgs[0];
// timeRange(hour1, hour2)
} else if (noOfArgs == 2) {
var currentHour = getCurrentHour(useGMTzone, currentDate);
result = (numericArgs[0] <= currentHour) && (currentHour < numericArgs[1]);
// timeRange(hour1, min1, hour2, min2)
} else if (noOfArgs == 4) {
result =
valueInRange(
secondsElapsedToday(numericArgs[0], numericArgs[1], 0),
secondsElapsedToday(getCurrentHour(useGMTzone, currentDate), getCurrentMinute(useGMTzone, currentDate), 0),
secondsElapsedToday(numericArgs[2], numericArgs[3], 59)
);
// timeRange(hour1, min1, sec1, hour2, min2, sec2)
} else if (noOfArgs == 6) {
result =
valueInRange(
secondsElapsedToday(numericArgs[0], numericArgs[1], numericArgs[2]),
secondsElapsedToday(
getCurrentHour(useGMTzone, currentDate),
getCurrentMinute(useGMTzone, currentDate),
getCurrentSecond(useGMTzone, currentDate)
),
secondsElapsedToday(numericArgs[3], numericArgs[4], numericArgs[5])
);
}
return result;
}
function secondsElapsedToday (hh, mm, ss) {
return ((hh*3600) + (mm*60) + ss);
}
function getCurrentHour (gmt, currentDate) {
return (gmt ? currentDate.getUTCHours() : currentDate.getHours());
}
function getCurrentMinute (gmt, currentDate) {
return (gmt ? currentDate.getUTCMinutes() : currentDate.getMinutes());
}
function getCurrentSecond (gmt, currentDate) {
return (gmt ? currentDate.getUTCSeconds() : currentDate.getSeconds());
}
// start <= value <= finish
function valueInRange (start, value, finish) {
return (start <= value) && (value <= finish);
}