Установка конкретных значений

Библиотека 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);

Первый аргумент определяет единицу измерения, второй — новое значение.

Поддерживаемые единицы:

  • year
  • month
  • date
  • hour
  • minute
  • second
  • millisecond

Установка года

Изменение года выполняется явно через 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);   // последний день предыдущего месяца

Такое поведение позволяет избегать ошибок при арифметике дат, но требует внимательности при передаче динамических значений.


Особенности работы с месяцами и днями

Месяцы нумеруются с нуля, что часто становится источником логических ошибок:

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

Дни месяца начинаются с 1, а ноль интерпретируется как последний день предыдущего месяца.


Комбинирование установки и вычислений

Установка значений часто используется вместе с другими операциями преобразования:

dayjs()
  .add(1, 'year')
  .month(0)
  .date(1);

Подобные конструкции применяются для формирования фиксированных дат на основе текущего времени.


Граничные значения и автоматическая корректировка

При выходе за пределы календарных диапазонов происходит автоматическая корректировка:

  • установка 31 февраля приводит к последнему дню февраля
  • установка 25 часа переносит дату на следующий день
  • установка отрицательных значений смещает дату назад
dayjs().date(40); // нормализуется в пределах следующего месяца
dayjs().hour(30); // переносит на следующий день

Локальные методы установки

Помимо универсального set, используются специализированные методы для повышения читаемости кода:

dayjs().year(2021);
dayjs().month(6);
dayjs().date(20);
dayjs().hour(12);
dayjs().minute(15);

Такие методы предпочтительнее в прикладном коде, так как явно отражают намерение изменения конкретного компонента даты.