333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 
/**
 * 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);
}