Перейти к содержимому

Функции даты и времени

Все функции дат работают со строками-датами в ISO-формате: YYYY-MM-DD для дат, YYYY-MM-DDTHH:MM:SS для дат+время. На вход также принимается русский формат (ДД.ММ.ГГГГ и т. п.) — система пытается распарсить.

today() / now()

  • today() — сегодняшняя дата.
  • now() — сегодня + текущее время.
today() // "2026-05-11"
date_diff(today(), purchase_date, 'days') // дней с покупки

date(year, month, day)

Конструктор даты. Месяц 1-based (январь = 1).

date(2026, 1, 1) // "2026-01-01"
date(year_of(today()), 12, 31) // последний день текущего года

date_diff(a, b, unit)

Разница b − a в указанной единице.

  • 'days' — целое число дней.
  • 'months' — целое число месяцев (по календарю).
  • 'years' — целое число лет.
date_diff(purchase_date, today(), 'days')
date_diff(purchase_date, today(), 'months')
date_diff(birth_date, today(), 'years') // возраст

Результат может быть отрицательным, если a позже b.

add_days(d, n), add_months(d, n), add_years(d, n)

Сдвиг даты на N единиц.

add_days(today(), 30) // через 30 дней
add_months(purchase_date, 12) // ровно через год
add_years(birth_date, 18) // дата совершеннолетия

date_part(d, unit)

Извлечь компонент даты как число.

  • 'year' — год (4 цифры).
  • 'month' — месяц (1–12).
  • 'day' — день месяца (1–31).
  • 'dayofweek' — день недели по ISO: 1 = понедельник, 7 = воскресенье.
  • 'hour', 'minute' — для дат с временем.
date_part(payment_date, 'month') // → 5
date_part(payment_date, 'dayofweek') // → 6 (суббота)

Шорткаты: year_of, month_of, day_of

Сокращения для самых частых вызовов date_part:

year_of(payment_date) // = date_part(payment_date, 'year')
month_of(payment_date) // = date_part(payment_date, 'month')
day_of(payment_date) // = date_part(payment_date, 'day')

month_start(d), year_start(d)

Первое число месяца / года, в котором лежит дата.

month_start(today()) // "2026-05-01"
year_start(today()) // "2026-01-01"

Удобно для группировок по месяцу.

is_weekend(d)

true для субботы/воскресенья.

is_weekend(payment_date)
if(is_weekend(payment_date), "Выходной", "Будний день")

Граничные случаи

  • Невалидная дата на входе → результат null.
  • Пустое значениеnull.
  • Сравнение дат через <, > работает, но обрабатывается через числовое преобразование строки — надёжнее использовать date_diff.

⚠️ Уточнить: поведение функций при разных таймзонах (например, add_days через DST-переход) детально не оттестировано в коде. Для большинства бытовых задач погрешность 0, но если вам нужны минутные точности — проверяйте на тестовых данных.

Частые ошибки

  • Передают строку в произвольном формате. Берёт ISO или русский (ДД.ММ.ГГГГ). Слово «вчера», «завтра» не работает.
  • Сравнивают дату с числом. Не сработает — приводите через date_diff.
  • Ожидают, что month_of(today()) == 5 сработает для строкового «май». Эта функция возвращает число 5, а не строку.

Что дальше