Работа с временными данными в D3.js основана на двух взаимодополняющих модулях: d3-time и d3-time-format. Первый отвечает за математические операции над датами и построение временных шкал, второй — за преобразование дат в строки и обратно. Вместе они формируют основу для визуализаций, где время выступает ключевой осью: графики динамики, календарные тепловые карты, интервальные диаграммы и временные ряды.
В JavaScript время представлено объектом Date, который
опирается на миллисекунды с 1 января 1970 года (UTC). Такая модель
удобна для хранения, но неудобна для аналитики:
toString и
toLocaleString.D3 решает эти проблемы через специализированные утилиты, предоставляющие:
Модуль d3-time предоставляет набор функций для работы с временными интервалами. Центральное понятие — interval, объект, представляющий шаг времени (день, неделя, месяц и т.д.).
d3.timeMillisecondd3.timeSecondd3.timeMinuted3.timeHourd3.timeDayd3.timeWeekd3.timeMonthd3.timeYearКаждый интервал имеет набор методов:
floor(date) — округление вниз к началу интервала;ceil(date) — округление вверх;round(date) — округление к ближайшему интервалу;offset(date, step) — смещение даты на заданное
количество шагов;range(start, stop, step) — генерация массива дат.Операции округления играют ключевую роль при построении осей и агрегации данных.
Пример поведения:
floor приводит дату к началу дня;ceil — к началу следующего дня, если дата не совпадает
с границей;round выбирает ближайшую границу.Логика применяется одинаково для всех интервалов, что обеспечивает предсказуемость при переходе от секунд к годам.
Метод range используется для создания массивов дат:
Типовой сценарий — построение шкалы для оси времени:
Особенность заключается в том, что шаг определяется не числом миллисекунд, а семантическим интервалом.
Метод offset позволяет изменять дату относительно
календарной логики:
Это отличает календарную арифметику от прямого прибавления миллисекунд.
D3 позволяет создавать собственные интервалы через
d3.timeInterval. Это полезно для:
Интервал определяется двумя функциями:
Дополнительно задаются методы округления и генерации диапазона.
Если d3-time отвечает за вычисления, то d3-time-format занимается представлением дат в строковом виде и обратным преобразованием.
Основа модуля — спецификация форматирования, похожая на
strftime.
Форматирование выполняется через функцию
d3.timeFormat.
Примеры спецификаторов:
%Y — полный год;%m — месяц (01–12);%d — день месяца;%H — часы (24-часовой формат);%M — минуты;%S — секунды.Комбинирование позволяет создавать любые представления:
D3 поддерживает локали через d3.timeFormatLocale.
Локаль определяет:
Это позволяет адаптировать визуализации под разные языки и региональные стандарты.
Функция d3.timeParse выполняет обратную операцию
форматированию.
Особенности:
null при несоответствии;Парсинг важен при обработке внешних источников данных: CSV, JSON API, логов.
D3 предоставляет предопределённые форматы:
d3.timeFormatDefaultLocaleОни используются для унификации вывода и снижения необходимости ручной настройки.
Визуализация временных рядов обычно строится на
d3.scaleTime, которая опирается на d3-time:
range;ticks;Таким образом, временные интервалы становятся частью системы масштабирования данных.
Оси времени используют комбинацию:
Процесс включает:
При больших диапазонах автоматически увеличивается шаг (день → неделя → месяц → год).
Временные ряды требуют унификации данных:
d3-time используется для:
Типовой подход:
timeWeek);Это позволяет строить:
Календарные данные содержат особенности:
D3 учитывает эти особенности через календарную арифметику, а не через фиксированные временные шаги.
JavaScript Date хранит время в UTC, но отображение
зависит от локального часового пояса.
D3 не вводит отдельный слой таймзон, но:
Для строгой работы с зонами обычно используется дополнительная логика поверх D3.
При обработке временных рядов критично:
parse на этапе загрузки;Это снижает количество ошибок при построении визуализаций.
Оптимизация достигается за счёт:
Map для группировок по датам.Особенно критично это при миллионах записей временных рядов.
d3-time и d3-time-format не используются изолированно. Типовая цепочка обработки данных:
Эта последовательность формирует основу большинства временных визуализаций в D3.js.