Преобразование объекта даты в структурированный массив в Day.js
выполняется через метод toArray(), который возвращает
фиксированную последовательность числовых компонентов даты и времени.
Такой формат используется для низкоуровневой работы с датой,
сериализации, передачи между слоями приложения и взаимодействия с API,
где требуется строго позиционное представление временных значений.
Метод toArray() преобразует экземпляр Day.js в массив,
содержащий компоненты даты в следующем порядке:
import dayjs from 'dayjs';
const d = dayjs('2026-05-23T14:45:30.250');
const arr = d.toArray();
console.log(arr);
// [2026, 4, 23, 14, 45, 30, 250]
Каждый элемент массива является числом, что упрощает дальнейшую математическую обработку или передачу данных в системы, не поддерживающие объекты даты.
Возвращаемая структура всегда имеет фиксированную длину — 7 элементов. Это позволяет использовать результат как предсказуемую структуру данных без дополнительной проверки типов.
[
year, // 4-значный год
month, // 0–11
date, // 1–31
hour, // 0–23
minute, // 0–59
second, // 0–59
millisecond // 0–999
]
Особое внимание требует поле месяца: оно начинается с нуля,
аналогично стандартному объекту Date в JavaScript. Это
означает, что январь представлен как 0, февраль как
1 и так далее.
Нулевая индексация месяца часто становится источником логических ошибок при преобразованиях между различными форматами даты.
const d = dayjs('2026-01-15');
const arr = d.toArray();
console.log(arr);
// [2026, 0, 15, 0, 0, 0, 0]
При обратной интерпретации массива в человекочитаемую дату необходимо учитывать смещение:
Массивное представление удобно для передачи данных через бинарные протоколы, WebSocket-сообщения или минимизированные JSON-структуры.
const payload = {
timestamp: dayjs().toArray()
};
Такой формат часто используется в системах, где важна компактность и предсказуемость структуры.
При вычислениях с датами, особенно в аналитике, массив позволяет напрямую обращаться к компонентам без вызова дополнительных методов.
const [year, month, day] = dayjs().toArray();
const isLeapYear = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
Некоторые API ожидают дату в виде массива, а не строки или объекта. Это характерно для аналитических систем и графических библиотек.
sendToApi({
date: dayjs('2026-05-23').toArray()
});
Метод toArray() возвращает локальное время, если не
используется соответствующий плагин для работы с UTC.
При подключении utc-режима поведение изменяется:
import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);
const d = dayjs.utc('2026-05-23T14:45:30Z');
console.log(d.toArray());
// компоненты будут соответствовать UTC-времени
Это важно при сравнении значений, полученных из разных источников данных, где временная зона может отличаться.
Встроенный объект Date предоставляет доступ к
компонентам через методы (getFullYear(),
getMonth() и т.д.), тогда как Day.js инкапсулирует эти
значения в одном вызове.
Сравнение:
const native = new Date();
const nativeArr = [
native.getFullYear(),
native.getMonth(),
native.getDate(),
native.getHours(),
native.getMinutes(),
native.getSeconds(),
native.getMilliseconds()
];
const dayjsArr = dayjs(native).toArray();
Day.js обеспечивает более компактную запись и единый интерфейс, исключая необходимость множественных вызовов методов.
Хотя toArray() выполняет только экспорт, часто требуется
обратная операция. В Day.js это достигается через конструктор:
const arr = [2026, 4, 23, 14, 45, 30, 250];
const d = dayjs(new Date(
arr[0],
arr[1],
arr[2],
arr[3],
arr[4],
arr[5],
arr[6]
));
Здесь важно сохранять порядок элементов и учитывать нулевую индексацию месяца.
Формат массива не содержит информации о временной зоне, календарных смещениях или локализации. Он отражает только «сырые» числовые компоненты даты.
Это приводит к следующим особенностям:
При построении сложных систем обработки времени массивный формат часто используется как промежуточное представление между строкой и объектом.
function normalizeDate(input) {
return dayjs(input).toArray();
}
function shiftDay(arr, days) {
const d = dayjs(new Date(...arr));
return d.add(days, 'day').toArray();
}
Такой подход упрощает построение цепочек преобразований без необходимости постоянно работать с форматированными строками.
Если объект Day.js содержит невалидную дату, toArray()
возвращает массив с NaN-значениями:
const d = dayjs('invalid-date');
console.log(d.toArray());
// [NaN, NaN, NaN, NaN, NaN, NaN, NaN]
Это поведение позволяет быстро выявлять ошибки на этапе обработки данных, особенно в массивах больших наборов дат.