123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
-
- /**
- * 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);
- }
|