Визуализация временных рядов в Chart.js опирается на систему
адаптеров дат, поскольку сам движок библиотеки не включает полноценный
парсер и форматировщик дат. Архитектура временной шкалы
(time scale) построена таким образом, что обработка дат
делегируется внешним библиотекам, обеспечивающим разбор, форматирование
и арифметику времени.
Ключевой слой взаимодействия — адаптер (date adapter),
который связывает Chart.js с конкретной библиотекой дат. В экосистеме
используются три основных варианта: date-fns, Luxon и Moment.js.
Временная шкала time в Chart.js не работает напрямую с
Date-объектами для всех операций. Вместо этого используется
слой абстракции:
Эти операции вынесены в адаптеры:
chartjs-adapter-date-fnschartjs-adapter-luxonchartjs-adapter-momentКаждый адаптер реализует единый интерфейс, ожидаемый Chart.js, но использует свою внутреннюю модель времени.
Перед использованием любого адаптера необходимо включить модуль временной шкалы:
import {
Chart,
TimeScale,
LinearScale,
LineElement,
PointElement,
LineController
} from 'chart.js';
Chart.register(TimeScale, LinearScale, LineElement, PointElement, LineController);
Без регистрации TimeScale адаптеры не будут применяться,
и ось времени не активируется.
date-fns строится на принципе функциональной модульности. В отличие от объектных библиотек, каждая операция реализована как отдельная функция. Это влияет на поведение адаптера:
npm install chartjs-adapter-date-fns date-fns
import 'chartjs-adapter-date-fns';
После подключения адаптер автоматически регистрируется в Chart.js.
const config = {
type: 'line',
data: {
datasets: [{
label: 'Температура',
data: [
{ x: '2026-01-01', y: 10 },
{ x: '2026-01-02', y: 12 }
]
}]
},
options: {
scales: {
x: {
type: 'time',
time: {
unit: 'day'
}
}
}
}
};
date-fns использует явный импорт локалей:
import { ru } from 'date-fns/locale';
options: {
scales: {
x: {
adapters: {
date: {
locale: ru
}
}
}
}
}
Поддерживаются:
2026-05-17)Преимущество: предсказуемость без скрытых преобразований.
Luxon основан на неизменяемых объектах DateTime, что
обеспечивает строгую работу с временными зонами и локалями.
Ключевая особенность — встроенная поддержка:
npm install chartjs-adapter-luxon luxon
import 'chartjs-adapter-luxon';
const config = {
type: 'line',
data: {
datasets: [{
label: 'Посещаемость',
data: [
{ x: '2026-01-01T10:00:00+06:00', y: 120 },
{ x: '2026-01-01T11:00:00+06:00', y: 150 }
]
}]
},
options: {
scales: {
x: {
type: 'time',
time: {
tooltipFormat: 'DD T'
}
}
}
}
};
Luxon позволяет задавать глобальную или локальную зону:
import { Settings } from 'luxon';
Settings.defaultZone = 'Asia/Almaty';
Это влияет на отображение осей и tooltip.
В Luxon используется синтаксис токенов:
DD — датаT — времяLLLL — полная датаАдаптер передаёт форматирование напрямую Luxon, что делает поведение строго детерминированным.
Moment.js долгое время был стандартом де-факто для работы с датами в JavaScript. Несмотря на статус legacy-библиотеки, он до сих пор используется в существующих проектах.
npm install chartjs-adapter-moment moment
import 'chartjs-adapter-moment';
Moment.js использует мутабельные объекты moment(), что
влияет на:
const config = {
type: 'line',
data: {
datasets: [{
label: 'Трафик',
data: [
{ x: '2026-01-01', y: 200 },
{ x: '2026-01-02', y: 250 }
]
}]
},
options: {
scales: {
x: {
type: 'time',
time: {
unit: 'day',
displayFormats: {
day: 'DD.MM'
}
}
}
}
}
};
Time scale в Chart.js включает несколько режимов интервалов:
millisecondsecondminutehourdayweekmonthquarteryearАдаптер отвечает за корректное агрегирование точек и генерацию тиков.
Поддерживаемые форматы:
{ x: Date, y: number }{ x: timestamp, y: number }{ x: ISO string, y: number }Chart.js передаёт значение в адаптер, который нормализует его в внутреннее представление выбранной библиотеки.
Форматирование осей зависит от адаптера:
Пример настройки:
options: {
scales: {
x: {
type: 'time',
ticks: {
maxRotation: 0,
autoSkip: true
}
}
}
}
Tooltip получает уже отформатированное значение от адаптера. В Luxon и Moment.js форматирование часто выполняется на уровне строки, тогда как date-fns может возвращать результат через отдельные функции форматирования.
При работе с тысячами точек:
При смене адаптера важно учитывать:
Chart.js не требует изменения dataset, но поведение отображения может измениться.
Любой адаптер обязан реализовывать набор методов:
parseformatadddiffstartOfendOfstartOfWeekendOfWeekЭти методы обеспечивают единое поведение временной шкалы независимо от выбранной библиотеки.