Javascript 如何确定iso 8601时间是否在小时范围内?
我正在制作一个javascript日历,我试图找出一个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) {
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相匹配。净结果?如果你不包括时区指示器,天堂只知道它是否会被解释为本地时间或格林尼治标准时间,即使在理解它的引擎上也是如此。