Библиотека Day.js предоставляет набор инструментов для точечного
изменения компонентов даты без необходимости ручной работы с объектом
Date. Основной подход основан на неизменяемости: каждый
вызов метода возвращает новый экземпляр даты, а исходный объект остаётся
нетронутым.
set(unit, value)Универсальный способ изменения отдельных частей даты реализуется
через метод set.
dayjs().set('year', 2025);
dayjs().set('month', 0);
dayjs().set('date', 15);
dayjs().set('hour', 10);
dayjs().set('minute', 30);
dayjs().set('second', 45);
dayjs().set('millisecond', 500);
Первый аргумент определяет единицу измерения, второй — новое значение.
Поддерживаемые единицы:
yearmonthdatehourminutesecondmillisecondИзменение года выполняется явно через set или
специализированный метод year().
dayjs().year(2024);
dayjs().set('year', 2024);
Оба варианта эквивалентны, однако year() чаще
используется как более читаемая форма.
Месяц задаётся числом от 0 до 11, где 0 соответствует январю, а 11 — декабрю.
dayjs().month(0); // январь
dayjs().month(11); // декабрь
dayjs().set('month', 5); // июнь
Особенность нумерации месяцев унаследована от стандартного объекта
Date, что важно учитывать при расчётах и
преобразованиях.
День месяца изменяется через date() или через
set('date', value).
dayjs().date(1);
dayjs().set('date', 31);
Значение автоматически корректируется в зависимости от месяца. Например, при установке 31-го числа в месяц с меньшим количеством дней результат будет приведён к последнему доступному дню месяца.
Для работы с временной частью даты используются одноимённые методы:
dayjs().hour(14);
dayjs().minute(45);
dayjs().second(30);
dayjs().millisecond(250);
Аналогично через универсальный интерфейс:
dayjs().set('hour', 14);
dayjs().set('minute', 45);
dayjs().set('second', 30);
dayjs().set('millisecond', 250);
Изменение одного компонента не затрагивает остальные значения, если явно не пересекается с логикой нормализации даты.
Каждая операция установки значения возвращает новый объект Day.js.
const base = dayjs();
const updated = base.year(2030);
console.log(base.year()); // исходное значение
console.log(updated.year()); // 2030
Это поведение исключает побочные эффекты и делает работу с датами предсказуемой при цепочках преобразований.
Методы можно комбинировать, последовательно формируя новую дату:
dayjs()
.year(2022)
.month(8)
.date(10)
.hour(9)
.minute(0)
.second(0);
Каждый вызов возвращает новый экземпляр, который передаётся дальше по цепочке.
При установке значений, выходящих за допустимые диапазоны, Day.js автоматически выполняет нормализацию:
dayjs().month(13); // переходит на следующий год
dayjs().date(0); // последний день предыдущего месяца
Такое поведение позволяет избегать ошибок при арифметике дат, но требует внимательности при передаче динамических значений.
Месяцы нумеруются с нуля, что часто становится источником логических ошибок:
Дни месяца начинаются с 1, а ноль интерпретируется как последний день предыдущего месяца.
Установка значений часто используется вместе с другими операциями преобразования:
dayjs()
.add(1, 'year')
.month(0)
.date(1);
Подобные конструкции применяются для формирования фиксированных дат на основе текущего времени.
При выходе за пределы календарных диапазонов происходит автоматическая корректировка:
dayjs().date(40); // нормализуется в пределах следующего месяца
dayjs().hour(30); // переносит на следующий день
Помимо универсального set, используются
специализированные методы для повышения читаемости кода:
dayjs().year(2021);
dayjs().month(6);
dayjs().date(20);
dayjs().hour(12);
dayjs().minute(15);
Такие методы предпочтительнее в прикладном коде, так как явно отражают намерение изменения конкретного компонента даты.