我正在制作一个javascript日历,我正在尝试查找iso 8601
字符串是否在一小时范围内,但没有太多运气。我有一系列的约会。每个约会都有一个start iso 8601
字符串。然后我尝试使用moment
来比较字符串是否在特定小时范围之间。小时只是传入的int
,即1, 2, 3, 4, ...
。这是我的代码:
function(appts, hour) {
var current = appts.forEach(function(appt) {
return moment(appt.startTime).isBetween(hour, hour + 1, 'hour');
});
return current;
}
我并不关心使用时刻。完成这项任务的方法是什么?
答案 0 :(得分:1)
将日期字符串转换为JavaScript对象,然后比较它们。
var dateRangeStart = new Date('2015-01-29T12:00:00');
var dateRangeEnd = new Date('2015-01-29T13:00:00');
var testDate = new Date('2015-01-29T12:30:00');
snippet.log("Range start: " + dateRangeStart.toISOString());
snippet.log("Range end: " + dateRangeEnd.toISOString());
snippet.log("Test date: " + testDate.toISOString());
if(dateRangeStart < testDate && testDate < dateRangeEnd){
snippet.log('Test date IS in range');
} else {
snippet.log('Test date is NOT in range');
}
&#13;
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
答案 1 :(得分:1)
如果hour
是您指定的号码,那么您只需将.hour()
与目标小时进行比较:
function(appts, hour) {
var current = appts.forEach(function(appt) {
return moment(appt.startTime).hour() == hour;
});
return current;
}
...假设您的hour
在午夜以0
开头,并在晚上11点继续23
,并假设您的hour
和日期时间字符串相同时区。如果它们不是,则您必须根据时区差异调整其中一个或另一个。如果您的hour
是UTC格式,只需在Moment实例上调用utc
即可轻松完成此操作:
function(appts, hour) {
var current = appts.forEach(function(appt) {
return moment(appt.startTime).utc().hour() == hour;
// Change -------------------^^^^^^
});
return current;
}