Luxon — это JavaScript-библиотека, которая делает работу с датами и временем удобнее и безопаснее. В Нейро42 она используется для вычислений, форматирования и преобразования дат прямо в выражениях и в Code-узле.
Для подробной информации о возможностях библиотеки изучайте официальную документацию Luxon.
Особенности работы с датами в Нейро42
- Даты между узлами передаются как строки
При переходе данных от одного узла к другому Нейро42 всегда сериализует дату в строку. Поэтому если вы хотите выполнять вычисления с датами, используйте Luxon для преобразования строки обратно в объект.
- JavaScript Date ≠ Luxon DateTime
Vanilla JS позволяет делать так:
new Date(‘2019-06-23’)
В Luxon синтаксис всегда явный:
DateTime.fromISO(‘2019-06-23’)
DateTime.fromFormat(«23-06-2019», «dd-MM-yyyy»)
Поддержка в Python-коде
Luxon — только для JavaScript. В Python доступны только переменные $now и $today, но:
- Нельзя делать операции Luxon, например: $today.minus(…)
- Нельзя использовать Luxon-конвертацию дат
- Python-код может работать только со строковыми значениями дат
Часовой пояс
Luxon использует тот таймзон, который настроен в Нейро42:
- По умолчанию: America/New_York
- Глобальная настройка экземпляра: через переменную окружения GENERIC_TIMEZONE
- Настройка конкретного воркфлоу — в параметрах воркфлоу
Практические примеры
Получить текущие дату и время
Нейро42 предоставляет два специальных Luxon-объекта:
| Переменная | Что возвращает | Аналог в Luxon |
| $now | Текущее время (timestamp) | DateTime.now() |
| $today | Текущую дату, округлённую до начала суток | DateTime.now().set({hour:0,minute:0,…}) |
Пример: {{$now}}
В интерфейсе отобразится ISO-строка вроде: 2022-03-09T14:02:37.065+00:00
Преобразование JS Date → Luxon DateTime
В выражениях: {{ (new Date()).toDateTime() }}
В Code-узле (JS): let luxonDate = DateTime.fromJSDate(new Date());
Преобразовать строку в дату Luxon
- Если строка в стандартном формате (ISO):
В выражениях: {{ DateTime.fromISO(‘2019-06-23T00:00:00.00’) }}
- Если строка в нестандартном формате:
Используйте fromFormat() и задавайте формат вручную.
{{ DateTime.fromFormat(«23-06-2019», «dd-MM-yyyy») }}
Если результат неожиданный — у Luxon есть раздел Limitations и Parsing Debugging Guide.
Получить дату N дней назад или вперед
Например, дату 7 дней назад: {{$today.minus({ days: 7 })}}
На 23 июня 2019 результат: 2019-06-16T00:00:00.000+00:00
Форматирование дат для человека
Чтобы преобразовать дату в привычный формат (например: 23/06/2019):
{{$today.minus({ days: 7 }).toLocaleString()}}
Или детализированный формат:
{{$today.minus({ days: 7 }).toLocaleString({ month: ‘long’, day: ‘numeric’, year: ‘numeric’ })}}
Результат: 16 June 2019
Подробнее — в разделе Luxon: toLocaleString.
Вычислить разницу между двумя датами
Например, количество месяцев между двумя датами:
{{ DateTime.fromISO(‘2019-06-23’).diff(DateTime.fromISO(‘2019-05-23’), ‘months’).toObject() }}
Результат: { «months»: 1 }
Пример посложнее: «Сколько дней осталось до Рождества?»
Этот пример совмещает Luxon, JMESPath и строковые операции.
{{
«There are »
+ $today.diff(DateTime.fromISO($today.year + ‘-12-25’), ‘days’)
.toObject()
.days
.toString()
.substring(1)
+ » days to Christmas!»
}}
На 9 марта вернет: There are 291 days to Christmas!
Что здесь происходит:
- Берем текущую дату через $today.
- Создаем дату Рождества текущего года: DateTime.fromISO($today.year + ‘-12-25’)
- Вычисляем разницу в днях.
- Конвертируем результат в объект.
- Извлекаем .days через JMESPath.
- Убираем знак “минус”.
- Формируем итоговую строку.