脚本比较日期/时间值的意外结果

时间:2019-04-30 19:46:58

标签: javascript date thingsboard

我存储了两个共享的设备属性(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不是我喝杯茶;-)

1 个答案:

答案 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!

我尚未测试所有案例,但这是您通常处理午夜的方式