我存储了两个共享的设备属性(MonitorStartTime(“ 20:00”)和MonitorStopTime(“ 06:00”),我想确定当前日期/时间是否在该时间间隔内。
我尝试在规则链中添加以下过滤器脚本:
var today = new Date();
var MonitorStartTime = metadata.shared_MonitorStartTime;
var MonitorStopTime = metadata.shared_MonitorStopTime;
var dd = String(today.getDate());
var mm = String(today.getMonth() + 1); //January is 0!
var yyyy = today.getFullYear();
var MonitorStartTime = new Date(mm +'/' + dd + '/' + yyyy + " " + MonitorStartTime);
var MonitorStopTime = new Date(mm +'/' + dd + '/' + yyyy + " " + MonitorStopTime);
if (MonitorStopTime < MonitorStartTime)
{
MonitorStopTime.setDate(MonitorStopTime.getDate() + 1);
}
return (today > MonitorStartTime) && (today< MonitorStopTime);
当metadata.shared_MonitorStartTime为“ 19:00”时 和metadata.shared_MonitorStopTime为“ 06:00”,我希望输出在20:30为true,但事实并非如此。 时间过了21:00,它将返回true。
与时区有关吗? Thingsboard在eu-west-2a区域中的AWS EC2实例上运行。 我位于瑞典(UTC + 2小时)。
如果是,该如何解决?感谢任何帮助, 因为JavaScript不是我喝杯茶;-)
答案 0 :(得分:0)
这里是失败的情况。假设of 'undefined' or 'null'.
在某个时间上午06:00和下午08:00 之前的某个时间,例如today
然后:
2019-05-01 01:00 AM
我建议像这样重写您的逻辑:
var today = new Date(); // 2019-05-01 01:00 AM
var MonitorStartTime = new Date(...); // 2019-05-01 08:00 PM
var MonitorStopTime = new Date(...); // 2019-05-02 06:00 AM
return today > MonitorStartTime && today < MonitorStopTime; // false!
我尚未测试所有案例,但这是您通常处理午夜的方式 。