因此,有很多关于如何计算两个日期之间的时间的例子。
但在我的情况下,我有一个约会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
转换为数字,同样在范围小时内,然后计算......我觉得这种方法我遇到了一些特殊情况的问题我可能不知道?
答案 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)
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 }