В экосистеме Vega и Vega-Lite работа с датами и временем строится на
двух уровнях: выражения (expression language Vega) и декларативные
преобразования/кодировки (Vega-Lite). Оба уровня опираются на JavaScript
Date, но предоставляют специализированные функции для
анализа временных рядов, агрегаций и визуальных шкал.
Ключевая особенность заключается в том, что время рассматривается не как строка или число, а как непрерывная временная шкала с поддержкой дискретизации, округления и локализации.
В выражениях Vega доступна функция создания даты из компонент:
datetime(year, month, date, hours, minutes, seconds, milliseconds)
Особенности:
month начинается с 0 (январь = 0)Примеры:
datetime(2026, 0, 1) // 1 января 2026
datetime(2026, 5, 21, 12) // 21 июня 2026, 12:00
Альтернативный конструктор:
time(year, month, date, hours, minutes, seconds, milliseconds)
Функционально идентичен datetime, используется в
зависимости от контекста выражений.
Функция получения текущего момента:
now()
Возвращает Date, соответствующий моменту вычисления
выражения.
В Vega expression language предусмотрены функции извлечения компонентов времени:
year(d)quarter(d)month(d)date(d) — день месяцаday(d) — день недели (0–6)hours(d)minutes(d)seconds(d)milliseconds(d)Пример:
year(datum.timestamp)
month(datum.timestamp)
date(datum.timestamp)
Эти функции активно применяются в calculate
трансформациях и условных выражениях.
Для корректной работы с глобальными данными часто используется UTC-логика.
В Vega выражениях доступны UTC-версии операций через стандартный
JavaScript Date, но логика часто реализуется через:
timeUnitНапример:
year(datum.timestamp)
при UTC-данных интерпретируется как год в UTC-контексте, если вход уже нормализован.
timeParse(format)(string)
Пример:
timeParse("%Y-%m-%d")("2026-05-21")
Форматы:
%Y — год%m — месяц%d — день%H — часы%M — минуты%S — секундыtimeFormat(format)(date)
Пример:
timeFormat("%Y-%m-%d")(new Date())
Используется для подписей осей, tooltip и вычисляемых полей.
В Vega-Lite основной механизм работы с временной дискретизацией —
timeUnit.
timeUnit преобразует непрерывное время в дискретные
группы:
{
"timeUnit": "yearmonth",
"field": "timestamp",
"type": "temporal"
}
yearquartermonthweekdaydatehoursminutessecondsmillisecondsyearmonthyearmonthdateyearmonthdatehours{
"data": {"url": "data.csv"},
"mark": "line",
"encoding": {
"x": {
"field": "date",
"timeUnit": "yearmonth",
"type": "temporal"
},
"y": {
"aggregate": "sum",
"field": "value"
}
}
}
Такой подход позволяет автоматически группировать данные по месяцам без ручной предобработки.
В Vega и Vega-Lite временные данные используют шкалу типа:
{
"type": "time"
}
Особенности:
DateПример:
{
"encoding": {
"x": {
"field": "timestamp",
"type": "temporal",
"scale": {"type": "time"}
}
}
}
timeUnit не только группирует, но и фактически округляет
дату до начала интервала.
Пример:
"timeUnit": "month"
Вход:
2026-05-21 14:32:10
Результат:
2026-05-01 00:00:00
Это поведение критично при построении:
{
"calculate": "year(datum.timestamp)",
"as": "year"
}
{
"filter": "year(datum.timestamp) >= 2020"
}
Можно комбинировать:
{
"filter": "month(datum.timestamp) === 0"
}
Функции времени часто используются для выделения повторяющихся циклов:
Пример выделения дня недели:
{
"calculate": "day(datum.timestamp)",
"as": "weekday"
}
Vega-Lite поддерживает автоматическое форматирование:
{
"axis": {
"format": "%b %Y"
}
}
Распространённые форматы:
%Y — год%b — сокращённый месяц%B — полный месяц%d — день месяцаДополнительно:
{
"tooltip": [
{"field": "timestamp", "type": "temporal"},
{"field": "value", "type": "quantitative"}
]
}
Vega автоматически форматирует дату в человекочитаемый вид, если не
задан formatType.
При работе с временем:
null значения игнорируются в агрегацияхtimeParse возвращают
nullnull приводят к пропуску записиОптимизация в Vega/Vega-Lite достигается за счёт:
timeUnittime вместо ручных вычисленийОсобенно критично при больших потоках данных:
year, month,
timeParsetimeUnitРазделение позволяет:
{
"mark": "line",
"encoding": {
"x": {"field": "date", "type": "temporal"},
"y": {"field": "value", "type": "quantitative"}
}
}
{
"x": {
"field": "date",
"timeUnit": "yearmonth",
"type": "temporal"
}
}
{
"calculate": "month(datum.date)",
"as": "month"
}
Временные функции Vega и Vega-Lite образуют единый слой обработки, в котором дата рассматривается одновременно как:
Эта модель обеспечивает согласованность между вычислениями, агрегациями и визуализацией без необходимости внешней предобработки данных.