使用jsonata的日期范围



我知道我可以在jsonata中使用$now()来比较JSON中的日期,例如jsonDate > $now(),但我希望能够在JSON中找到当前周的日期,例如周一到周日,例如jsonDate >= $monday and jsonDate <= $sunday

我该怎么做呢?

一个更完整的例子:

matches[venueId = 2043][startTime >= $now()].{
"field": venue.name,
"id": id,
"startTime": startTime,
"team1": team1.name,
"team2": team2.name
}

在JSONata中,您可以使用$fromMillis()函数将Unix epoch以来的毫秒数转换为日期时间字符串,并使用$toMillis()将日期时间字符串转换回毫秒数。这与一些数学运算相结合,将帮助您找到一周的开始(星期一)和一周的结束(星期日)。

下面是如何创建JSONata表达式来查找JSON中当前星期内的日期:

(
$nowMs := $toMillis($now());
$daysSinceEpoch := $floor($nowMs / (1000 * 60 * 60 * 24));
$daysSinceMonday := ($daysSinceEpoch - 4) % 7;
$mondayMs := $nowMs - $daysSinceMonday * (1000 * 60 * 60 * 24);
$sundayMs := $mondayMs + 6 * (1000 * 60 * 60 * 24);
$monday := $fromMillis($mondayMs, "[Y0001]-[M01]-[D01]");
$sunday := $fromMillis($sundayMs, "[Y0001]-[M01]-[D01]");
$monday & " to " & $sunday
)

$daysSinceMonday := ($daysSinceEpoch - 4) % 7;-记住,1970年1月1日是个星期四。

你可以在Stedi的JSONata Playground中查看这个表达式:https://stedi.link/E62tWKi

最新更新