Создание объектов даты

Библиотека Day.js строит все объекты даты вокруг единственной функции — dayjs(). Она возвращает неизменяемый объект, содержащий момент времени с точностью до миллисекунд.

import dayjs from 'dayjs';

const d = dayjs();

Вызов без аргументов создаёт объект, соответствующий текущему времени системы. Это базовая точка входа, от которой строятся все остальные варианты создания дат.


Создание даты на основе текущего времени

При отсутствии параметров dayjs() всегда интерпретируется как момент вызова:

const now = dayjs();

Каждое последующее создание будет фиксировать новое значение времени, так как объект не хранит ссылку на «живую» дату, а представляет конкретный момент.


Создание из строки

Day.js поддерживает разбор строк в формате ISO 8601 без дополнительных настроек:

const date = dayjs('2026-01-15');
const datetime = dayjs('2026-01-15T10:30:00');

Поддерживаемые варианты включают:

  • YYYY-MM-DD
  • YYYY-MM-DDTHH:mm:ss
  • ISO-строки с временной зоной

Строка автоматически парсится через встроенный механизм JavaScript Date, поэтому корректность зависит от стандарта формата.

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


Создание из объекта Date JavaScript

Day.js напрямую оборачивает стандартный объект Date:

const jsDate = new Date(2026, 0, 15, 10, 30);
const d = dayjs(jsDate);

Это один из самых надёжных способов интеграции с внешними API и нативными библиотеками JavaScript, которые возвращают Date.

Важно: Day.js не копирует ссылку на объект — он создаёт собственное представление момента времени.


Создание из timestamp (Unix-время)

Поддерживается создание даты из количества миллисекунд, прошедших с 1 января 1970 года UTC:

const d = dayjs(1700000000000);

Если требуется работа с секундами, их необходимо предварительно преобразовать:

const seconds = 1700000000;
const d = dayjs(seconds * 1000);

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


Некорректные и пустые значения

Если передать некорректную строку или значение, Day.js создаёт объект с состоянием invalid:

const d = dayjs('not-a-date');

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

d.isValid();

Результат false означает, что дата не была распознана.


Создание с использованием плагина customParseFormat

Для разбора нестандартных строк используется плагин customParseFormat.

Подключение:

import dayjs from 'dayjs';
import customParseFormat from 'dayjs/plugin/customParseFormat';

dayjs.extend(customParseFormat);

После подключения становится доступен разбор форматов вручную:

const d = dayjs('15-01-2026', 'DD-MM-YYYY');

Также поддерживается строгий режим:

const strict = dayjs('15/01/2026', 'DD-MM-YYYY', true);

Строгий режим требует полного соответствия формату.


Создание с UTC-плагином

Для работы с универсальным временем применяется utc плагин:

import utc from 'dayjs/plugin/utc';

dayjs.extend(utc);

Создание даты в UTC:

const d = dayjs.utc('2026-01-15T10:30:00Z');

или из timestamp:

const d = dayjs.utc(1700000000000);

UTC-объекты позволяют избежать смещения, связанного с локальной временной зоной.


Клонирование объектов даты

Каждый объект Day.js является иммутабельным, поэтому операции не изменяют исходный экземпляр. Однако создание копии возможно через вызов функции:

const original = dayjs('2026-01-15');
const copy = dayjs(original);

Оба объекта будут независимыми представлениями одного и того же момента времени.


Иммутабельность как основа модели создания

Каждое создание объекта в Day.js возвращает новый экземпляр, независимо от источника данных:

  • строка
  • timestamp
  • Date
  • другой dayjs-объект

Изменение состояния всегда приводит к созданию нового объекта, что исключает побочные эффекты:

const a = dayjs('2026-01-15');
const b = a.add(1, 'day');

a остаётся неизменным, а b содержит новое значение времени.


Особенности интерпретации входных данных

При создании даты библиотека использует следующий порядок обработки:

  1. Проверка, является ли аргумент dayjs-объектом
  2. Проверка на Date
  3. Проверка на числовой timestamp
  4. Разбор строки
  5. Возврат текущего времени при отсутствии аргумента

Такая последовательность обеспечивает предсказуемость поведения при разных типах входных данных.


Создание дат с нулевыми значениями

Передача нуля как timestamp создаёт дату начала Unix-эпохи:

const d = dayjs(0);

Результат соответствует:

  • 1970-01-01T00:00:00.000Z

Это значение часто используется как базовая точка отсчёта в системах хранения времени.


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

Day.js делегирует интерпретацию некорректных дат встроенному Date, поэтому:

dayjs('2026-99-99');

может привести к автоматической нормализации или invalid-состоянию в зависимости от среды выполнения.


Итоговая модель создания объекта

Создание объекта Day.js всегда сводится к преобразованию входных данных в внутренний timestamp, после чего формируется неизменяемая структура, представляющая конкретный момент времени в глобальной временной шкале.