javascript:评估给定小时是否介于两小时之间

时间:2016-01-29 17:54:53

标签: javascript date time

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

但在我的情况下,我有一个约会X.让我们说它是今天。 X有一个与之相关的时间,例如08:00(或者我从dates = pd.date_range('1982-1-1', '2016-1-28', freq='B') date_dict = {yr: [d for d in dates if d.year == yr] for yr in range(dates[0].year, dates[-1].year + 1)} >>> dates_dict[2016] [Timestamp('2016-01-01 00:00:00', offset='B'), Timestamp('2016-01-04 00:00:00', offset='B'), Timestamp('2016-01-05 00:00:00', offset='B'), Timestamp('2016-01-06 00:00:00', offset='B'), Timestamp('2016-01-07 00:00:00', offset='B'), Timestamp('2016-01-08 00:00:00', offset='B'), Timestamp('2016-01-11 00:00:00', offset='B'), Timestamp('2016-01-12 00:00:00', offset='B'), Timestamp('2016-01-13 00:00:00', offset='B'), Timestamp('2016-01-14 00:00:00', offset='B'), Timestamp('2016-01-15 00:00:00', offset='B'), Timestamp('2016-01-18 00:00:00', offset='B'), Timestamp('2016-01-19 00:00:00', offset='B'), Timestamp('2016-01-20 00:00:00', offset='B'), Timestamp('2016-01-21 00:00:00', offset='B'), Timestamp('2016-01-22 00:00:00', offset='B'), Timestamp('2016-01-25 00:00:00', offset='B'), Timestamp('2016-01-26 00:00:00', offset='B'), Timestamp('2016-01-27 00:00:00', offset='B'), Timestamp('2016-01-28 00:00:00', offset='B')] 获得的)

我需要知道 X 的小时数是否介于开始时间(比如“07:00”)和结束时间(比如说“12:00”)

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

性能是一个问题,因此无论表现更好都是首选(例如,如果它意味着使用getHours(),那很好,但如果自定义函数表现更好,我们希望这样做)

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

3 个答案:

答案 0 :(得分:1)

您可以使用moment-range

来自docs:

  

您还可以从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

答案 1 :(得分:1)

如果您想查看零件时间,请考虑将小时数转换为分钟,如下所示。你将如何处理午夜过去的范围?例如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>
                 

答案 2 :(得分:0)

你正在处理军事时间吗? (从0:00到24:00)

getHours()返回一个Integer,如果你只对几小时而不是几分钟感兴趣,你可以使用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 }