Преобразование в массив

Преобразование объекта даты в структурированный массив в 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]

При обратной интерпретации массива в человекочитаемую дату необходимо учитывать смещение:

  • 0 → январь
  • 1 → февраль
  • 11 → декабрь

Сценарии использования toArray()

Сериализация для транспортировки данных

Массивное представление удобно для передачи данных через бинарные протоколы, 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

Некоторые 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

Встроенный объект 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]
));

Здесь важно сохранять порядок элементов и учитывать нулевую индексацию месяца.

Ограничения формата массива

Формат массива не содержит информации о временной зоне, календарных смещениях или локализации. Он отражает только «сырые» числовые компоненты даты.

Это приводит к следующим особенностям:

  • отсутствие метаданных о часовом поясе
  • невозможность восстановить оригинальный ISO-стринг без контекста
  • зависимость результата от локального или UTC-режима объекта

Использование в структурных преобразованиях

При построении сложных систем обработки времени массивный формат часто используется как промежуточное представление между строкой и объектом.

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]

Это поведение позволяет быстро выявлять ошибки на этапе обработки данных, особенно в массивах больших наборов дат.