Одним из способов инициализации даты в Day.js является передача объекта с календарными компонентами. Такой подход используется для явного задания всех частей даты без разбора строкового представления или использования timestamp.
import dayjs from 'dayjs';
const date = dayjs({
year: 2024,
month: 0,
day: 15,
hour: 10,
minute: 30,
second: 45
});
Объектная форма особенно полезна в ситуациях, когда данные поступают из форм, API или внутренних структур, где каждый компонент даты уже представлен отдельно.
При создании даты через объект используются стандартные ключи:
const date = dayjs({
year: 2025,
month: 11,
day: 31,
hour: 23,
minute: 59,
second: 59,
millisecond: 999
});
Особое внимание требуется полю month, так как его
значение начинается с нуля. Ошибка в интерпретации месяца является одной
из наиболее частых причин некорректных дат.
Day.js выполняет автоматическую нормализацию выходящих за пределы значений. При переполнении компонентов происходит перенос в старшие единицы времени.
const date = dayjs({
year: 2024,
month: 0,
day: 40
});
В данном случае 40-й день января преобразуется в корректную календарную дату с переходом в февраль.
Аналогично обрабатываются:
Объект может содержать только часть полей. Отсутствующие компоненты принимают значения по умолчанию, соответствующие началу суток.
const date = dayjs({
year: 2023,
month: 6,
day: 10
});
В таком случае время устанавливается в 00:00:00.000.
Такой подход используется при работе с календарными датами без временной составляющей, например:
При передаче некорректных значений объектная инициализация не всегда приводит к ошибке. Вместо этого создаётся некорректная дата (Invalid Date).
const date = dayjs({
year: 'не число',
month: null,
day: undefined
});
Результат такой операции не является валидной датой и требует проверки через механизм:
date.isValid()
При построении даты из объекта значения интерпретируются как единое целое. Внутренне Day.js последовательно формирует дату на основе переданных полей, после чего применяет локальные или UTC-преобразования (при наличии соответствующих плагинов).
Особенности обработки:
Объектная форма часто применяется при обработке массивов структурированных данных.
const rawData = [
{ year: 2024, month: 0, day: 1 },
{ year: 2024, month: 0, day: 2 },
{ year: 2024, month: 0, day: 3 }
];
const dates = rawData.map(item => dayjs(item));
Такой подход упрощает трансформацию данных из внешних источников без промежуточного форматирования строк.
При использовании дополнительных расширений поведение объектной инициализации может изменяться.
Например, при подключении UTC-плагина:
import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);
const date = dayjs.utc({
year: 2024,
month: 5,
day: 20
});
В этом случае объект интерпретируется в контексте UTC, а не локального времени среды выполнения.
При частичном определении временных компонентов поведение остаётся детерминированным:
const date = dayjs({
year: 2024,
month: 8,
day: 5,
hour: 14
});
Результирующее время фиксируется как 14:00:00.000.
Объектная инициализация отличается от строковой и числовой:
dayjs('2024-01-01');
dayjs(1704067200000);
dayjs({ year: 2024, month: 0, day: 1 });
Объектная форма обеспечивает наибольшую прозрачность при работе с календарными данными и минимизирует неоднозначность интерпретации.