Перейти к основному содержимому
Версия: 2.0 (WIP)

Обработка даты и времени

Время вычисления: $now()

Текущую отметку времени возвращают две функции:

  1. $now() — строку в формате ISO 8601.
  2. $millis() — число миллисекунд с полуночи 1 января 1970 года UTC (эпохи Unix).

Отметка захватывается в начале вычисления выражения. Все вызовы $now() и $millis() внутри одного выражения до завершения вычисления возвращают одно и то же время.

{
"invoiceTime": $now(),
"total": $sum(Account.Order.Product.(Price * Quantity)),
"closingTime": $now()
}

Например, оба временных поля могут быть "2018-12-10T13:49:51.141Z", а total336.36.

JSON и ISO 8601

В JSON нет встроенного типа даты/времени; общепринято хранить их строками ISO 8601:

{ "myDateTime": "2018-12-10T13:45:00.000Z" }

JSONata придерживается этого соглашения и форматирует/разбирает такие отметки функциями $toMillis() и $fromMillis().

Другие форматы

Данные могут использовать иные представления даты. Для форматирования и разбора JSONata поддерживает гибкие picture strings из спецификации XPath/XQuery fn:format-dateTime(). Подробности — у $toMillis() и $fromMillis().

$toMillis('10/12/2018', '[D]/[M]/[Y]') ~> $fromMillis('[M]/[D]/[Y]')
$toMillis('10/12/2018', '[D]/[M]/[Y]') ~> $fromMillis('[FNn], [D1o] [MNn] [YI]')

Первое преобразует европейское 10/12/2018 в американское "12/10/2018"; второе даёт "Monday, 10th December MMXVIII".