如何判断iso 8601时间是否在一小时范围内?

时间:2015-01-26 14:02:01

标签: javascript momentjs

我正在制作一个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;
        }

我并不关心使用时刻。完成这项任务的方法是什么?

2 个答案:

答案 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;
&#13;
&#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;
}