如何用Jsonata筛选当前周一至周日范围内的JSON日期数据?
用户问题(翻译后)
我知道可以在Jsonata中使用$now()与JSON中的日期进行比较,比如jsonDate > $now(),但我希望筛选出JSON中属于**当前周(周一至周日)**的日期,实现jsonDate >= $monday 且 jsonDate <= $sunday的效果。请问该如何操作?以下是我目前的代码示例:
matches[venueId = 2043][startTime >= $now()].{ "field": venue.name, "id": id, "startTime": startTime, "team1": team1.name, "team2": team2.name }
用Jsonata筛选当前周(周一至周日)的日期
你可以通过计算本周一的起始时刻和本周日的结束时刻,替换原代码中的时间条件,实现当前周日期的筛选。
修改后的完整代码
// 计算本周一00:00:00的时间戳 $monday := $adjust($now(), "day", 1 - $dayOfWeek($now()), "hour", -$hour($now()), "minute", -$minute($now()), "second", -$second($now())); // 计算本周日23:59:59的时间戳 $sunday := $adjust($monday, "day", 6, "hour", 23, "minute", 59, "second", 59); matches[venueId = 2043][startTime >= $monday and startTime <= $sunday].{ "field": venue.name, "id": id, "startTime": startTime, "team1": team1.name, "team2": team2.name }
关键逻辑说明
$dayOfWeek($now()):获取当前星期几,Jsonata的规则是周日=0,周一=1,周六=6。- 计算
$monday:通过$adjust函数将当前时间回退到本周一,同时重置时分秒为0,确保是周一的起始点。 - 计算
$sunday:在周一的基础上加6天,再设置时分秒为23:59:59,得到周日的最后一刻。 - 筛选条件
[startTime >= $monday and startTime <= $sunday]:保留所有在本周时间范围内的匹配项。
如果你的startTime是字符串格式的日期(例如"2024-05-20T14:30:00"),Jsonata会自动将其转换为日期类型进行比较,无需额外处理。
内容的提问来源于stack exchange,提问作者Tyssen
相关产品推荐
相关产品推荐

