Javascript 如何确定iso 8601时间是否在小时范围内?

Javascript 如何确定iso 8601时间是否在小时范围内?,javascript,momentjs,Javascript,Momentjs,我正在制作一个javascript日历,我试图找出一个ISO8601字符串是否在一个小时范围内,但运气不太好。我有很多约会。每个约会都有一个startTime,它是一个iso 8601字符串。然后,我尝试使用矩来比较字符串是否在特定的小时范围内。小时只是一个传递进来的int,即1,2,3,4,…。这是我的密码: function(appts, hour) { var current = appts.forEach(function(appt) {

我正在制作一个javascript日历,我试图找出一个
ISO8601
字符串是否在一个小时范围内,但运气不太好。我有很多约会。每个约会都有一个startTime,它是一个
iso 8601
字符串。然后,我尝试使用
来比较字符串是否在特定的小时范围内。小时只是一个传递进来的
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=新日期('2015-01-29T12:00:00');
var dateRangeEnd=新日期('2015-01-29T13:00:00');
var testDate=新日期('2015-01-29T12:30:00');
log(“范围开始:”+dateRangeStart.toISOString());
log(“范围结束:+dateRangeEnd.toISOString());
log(“测试日期:+testDate.toISOString());
如果(dateRangeStart

如果
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格式,只需调用片刻实例即可轻松完成:

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

上面的
hour
是什么?只是一个数字,0-23?包含日期和时间的
Date
实例?包含日期和时间的
时刻
实例?它是一个数字<代码>1,2,3,4,5…
小心
新日期('2015-01-29T12:00:00')
,原因有二:1。这种格式直到ES5(2009)才被添加到JavaScript中,因此较旧的浏览器通常不支持这种格式。2.在ES5中,他们定义去掉时区指示器意味着GMT,这与ISO-8601相反。这已经够糟糕了,但现在ES6规范正试图改变这一点,使之与ISO-8601相匹配。净结果?如果你不包括时区指示器,天堂只知道它是否会被解释为本地时间或格林尼治标准时间,即使在理解它的引擎上也是如此。