如何查找 iso 8601 时间是否在一个小时范围内?

How can I find if a iso 8601 time is within an hour range?

我正在制作一个 javascript 日历,我正在尝试查找 iso 8601 字符串是否在一个小时范围内,但运气不佳。我有一系列约会。每个约会都有一个开始时间,它是一个 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;
        }

我并不执着于使用时刻。完成这个任务的方法是什么?

将日期字符串转换为 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');
}
<!-- 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>

如果 hour 是您指定的数字,那么您只需将 .hour() 与您的目标时间进行比较:

function(appts, hour) {
   var current = appts.forEach(function(appt) {
     return moment(appt.startTime).hour() == hour;
   });
   return current;
}

...假设您的 hour 从午夜 0 开始,一直持续到 23 11 p.m,并假设您的 hour 和日期时间字符串在同一时区。如果不是,则您必须针对时区差异调整一个或另一个。如果您的 hour 使用的是 UTC,您只需在 Moment 实例上调用 utc 即可轻松实现:

function(appts, hour) {
   var current = appts.forEach(function(appt) {
     return moment(appt.startTime).utc().hour() == hour;
     // Change -------------------^^^^^^
   });
   return current;
}