JavaScript:评估给定的小时是否在两个小时之间



所以有很多关于如何计算两个日期之间时间的例子。

但就我而言,我有一个日期X。假设是今天。X 有一个时间关联,例如 08:00(或者我从.getHours()那里得到的

我需要知道 X 的小时是否在开始小时(说"07:00")和结束小时(说"12:00")之间

X 将始终通过 getHours() 检索范围的开始和结束时间具有固定格式(例如"07:00"和"12:00")

性能

是一个问题,所以任何性能更好的东西都是首选(例如,如果它意味着使用 moment ,那很好,但如果自定义函数会表现得更好,我们希望这样)

我的第一个方法是,由于格式是固定的,将.getHours()转换为数字,同样是范围小时,然后计算......我觉得这种方法在一些我可能不知道的特殊情况下遇到了麻烦?

您可以使用

矩范围

从文档中:

您还可以从 ISO 8601 时间间隔字符串创建范围:

var timeInterval = "2015-01-17T09:50:04+00:00/2015-04-17T08:29:55+00:00";
var range = moment.range(timeInterval);
range.contains(X); // true if between interval

如果您想检查兼职时间,请考虑将小时数转换为分钟,如下所示。您将如何处理超过午夜的范围?例如 23:30 至 01:30。

/*  Determine if the current time is between two provided hours
**  @param {string} h0 - time in format h:mm
**  @param {string} h1 - time in format h:mm
**  @returns {boolean} true if the current time is between or equal to h0 and h1
*/
function betweenHours(h0, h1) {
  var now = new Date();
  var mins = now.getHours()*60 + now.getMinutes();
  return toMins(h0) <= mins && mins <= toMins(h1);
}
/*  Convert hours to minutes
**  @param {string} h - time in format h:mm
**  @returns {number} time converted to minutes
*/
function toMins(h) {
  var b = h.split(':')
  return b[0]*60 + +b[1];
}
 
<form>
  Start time (h:mm)<input name="startHours">
  <br>
  End time (h:mm)<input name="endHours">
  <br>
  <button type="button" onclick="
   this.form.inRange.value = betweenHours(this.form.startHours.value, this.form.endHours.value);
   ">Check range</button>
  <br>
  Currently in range? <input name="inRange" readonly>
</form>
                 

你在处理军事问题吗?(从 0:00 到 24:00)

getHours()返回一个整数,如果你只对小时而不是分钟感兴趣,你可以使用 parseInt() 将开始和结束小时也转换为整数。例如,parseInt('07:00', 10)将返回7 。因此,如果您想创建一个函数来测试当前时间是否在两个小时之间,它可能看起来像这样:

function isBetweenHours(startHour, endHour)
{
    var now = new Date().getHours();
    return now >= parseInt(startHour, 10) && now <= parseInt(endHour, 10);
}

然后你会像这样使用它:

if( isBetweenHours('07:00', '12:00') ) { //some code here }

最新更新