Работа с датой и временем

Luxon — это JavaScript-библиотека, которая делает работу с датами и временем удобнее и безопаснее. В Нейро42 она используется для вычислений, форматирования и преобразования дат прямо в выражениях и в Code-узле.

Для подробной информации о возможностях библиотеки изучайте официальную документацию Luxon

 

Особенности работы с датами в Нейро42

  1. Даты между узлами передаются как строки

При переходе данных от одного узла к другому Нейро42 всегда сериализует дату в строку. Поэтому если вы хотите выполнять вычисления с датами, используйте Luxon для преобразования строки обратно в объект.

  1. 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:

  1. По умолчанию: America/New_York
  2. Глобальная настройка экземпляра: через переменную окружения GENERIC_TIMEZONE
  3. Настройка конкретного воркфлоу — в параметрах воркфлоу

Практические примеры

Получить текущие дату и время

Нейро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

  1. Если строка в стандартном формате (ISO):

В выражениях: {{ DateTime.fromISO(‘2019-06-23T00:00:00.00’) }}

  1. Если строка в нестандартном формате:

Используйте 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!

Что здесь происходит:

  1. Берем текущую дату через $today.
  2. Создаем дату Рождества текущего года:  DateTime.fromISO($today.year + ‘-12-25’)
  3. Вычисляем разницу в днях.
  4. Конвертируем результат в объект.
  5. Извлекаем .days через JMESPath.
  6. Убираем знак “минус”.
  7. Формируем итоговую строку.

Предупреждение о применении иностранного языка

Настоящий мануал включает иностранные термины и выражения, оставленные в оригинале ввиду специфики предметной области и сложности однозначного перевода на русский язык. Данные элементы используются исключительно в целях повышения точности и ясности изложенного материала, поскольку точные аналоги на русском языке либо отсутствуют, либо существенно усложняют восприятие информации пользователями-профессионалами.

Техническая документация не является информацией для широкого круга потребителей. Документация предназначена исключительно для специализированных целей и рассчитана на аудиторию профессионалов, обладающих соответствующей квалификацией и знанием отраслевых стандартов и терминологии. Использование иностранной лексики согласуется с положениями действующего российского законодательства, регулирующего употребление иностранных слов в специальных материалах, направленных на профессиональных пользователей

Данная мера принята для минимизации рисков неправильного толкования ключевых понятий и предотвращения негативных последствий, связанных с некорректностью переводов сложных технических терминов и выражений.

Мы обращаем внимание на тот факт, что наличие иностранного языка в данной документации обусловлено профессиональной необходимостью и соответствует установленным нормам и правилам использования специализированной литературы и документации в Российской Федерации.

Свяжитесь с нами

Спасибо, получили вашу заявку!
Скоро мы с вами свяжемся.

А пока посмотрите реализованные проекты, которыми мы поделились на сайте.