ThingsBoard规则链过滤脚本节点:元数据时间戳与服务器时间对比问题
问题解决方法
核心原因:类型不匹配导致比较失效
在ThingsBoard的TBEL表达式中,直接用Date和metadata.dateTo比较时,两者类型大概率不一致——Date是日期对象,而metadata.dateTo作为资产的timestamp属性,可能是数字类型的时间戳(毫秒/秒)或字符串格式的日期,类型不匹配会导致逻辑判断异常,所以始终返回False。
具体修正方案
根据metadata.dateTo的实际存储类型,选择对应转换方式:
情况1:dateTo存储为毫秒级时间戳(数字)
将Date转换为毫秒级时间戳后再比较:
return Date.getTime() > metadata.dateTo;
情况2:dateTo存储为秒级时间戳(数字)
需统一时间单位后对比,两种方案可选:
// 方案1:当前时间转成秒级 return Math.floor(Date.getTime() / 1000) > metadata.dateTo; // 方案2:将dateTo转成毫秒级 return Date.getTime() > metadata.dateTo * 1000;
情况3:dateTo存储为字符串格式日期(如"2024-05-20T12:00:00Z")
把字符串转换为日期对象后再比较:
return Date > new Date(metadata.dateTo);
验证调试方法
可以先输出两者的类型和具体值,确认转换逻辑是否正确:
return { currentTime: Date, currentTimeMs: Date.getTime(), dateToValue: metadata.dateTo, dateToType: typeof metadata.dateTo, compareResult: Date.getTime() > metadata.dateTo };
内容的提问来源于stack exchange,提问作者tomtomnz
相关产品推荐
相关产品推荐

