logo

Клонирование объекта Date в JavaScript: избегаем ссылок

Быстрый ответ

Чтобы скопировать объект Date в JavaScript, следует использовать данный код:

JS
Скопировать код
const clonedDate = new Date(originalDate.getTime());

Этот подход предполагает вызов метода getTime(), который возвращает timestamp исходной даты originalDate. Затем этот timestamp используется для создания нового экземпляра Date, обеспечивая точное и независимое его дублирование.

Глубокое погружение: методы копирования объекта Date

В процессе разработки на JavaScript часто возникает необходимость в дублировании объектов Date. Рассмотрим доступные подходы к копированию объекта Date и объясним их нюансы.

Копирование с помощью getTime() или valueOf()

Для получения количества миллисекунд, прошедших с начала эры Unix, можно применить методы getTime или valueOf. Они возвращают timestamp, который служит основой для копии.

JS
Скопировать код
// Перенос во времени без надобности машины времени!
const cloneDate1 = new Date(originalDate.getTime());
const cloneDate2 = new Date(originalDate.valueOf());

Унарный плюс: просто и эффективно

Вы можете привести объект Date к числу с помощью унарного плюса. Таким способом можно получить идеальную копию даты.

JS
Скопировать код
// Поразительно просто! И без вызова каких-либо методов.
const cloneDate = new Date(+originalDate);

Взаимодействие с копией

Скопированная дата готова к использованию. Вы можете свободно изменять копию, не затрагивая при этом исходную дату.

JS
Скопировать код
// К скопированной дате применяется перенос времени на 10 лет вперед
cloneDate.setFullYear(cloneDate.getFullYear() + 10);

Остерегайтесь: изменения затрагивают оригинал

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

JS
Скопировать код
// Эффект бабочки: изменяя “newDate”, мы влияем на “originalDate”.
let newDate = originalDate;
newDate.setFullYear(newDate.getFullYear() + 1000);

Визуализация

Приведем концепцию копирования даты в визуальном формате:

Markdown
Скопировать код
Оригинальная дата: 📅 (5 ноября 1955 г.)
Скопированная дата: 📅👯 (5 ноября 1955 г.)

С первого взгляда, оригинал и копия выглядят идентично, но на самом деле они — независимые сущности, соответствующие одному и тому же моменту времени.

Советы и особенности копирования объектов Date

Часовые пояса: важный момент при копировании

Не забывайте, что объекты Date в JavaScript создаются в часовом поясе исполнения кода, и этот часовой пояс сохраняется при копировании.

Ошибочное копирование: работа с недопустимыми датами

Создание копии недопустимой даты приведет к появлению еще одной такой же недопустимой даты. Будьте внимательны при копировании!

JS
Скопировать код
// Знакомьтесь: двойник недопустимой даты – тоже недопустимая дата!
const invalidDate = new Date('некорректный формат даты');
const cloneInvalid = new Date(invalidDate.getTime());

Эффективность использования getTime()

Если вам надо скопировать большое количество дат, то new Date(original.getTime()) будет очень полезным благодаря своей высокой эффективности.

Современность наших дней: встроенные методы

Несмотря на то что библиотеки типа Moment.js предлагали удобные методы для копирования, например, clone(), современный JavaScript предоставляет простые способы для копирования дат, упрощая этот процесс.

Полезные материалы

  1. Date – JavaScript | MDN — Справочник по объекту Date в JavaScript.
  2. javascript – How to clone a Date object? – Stack Overflow — Обсуждения и способы копирования дат.
  3. How to deep clone a JavaScript object — Руководство по глубокому копированию объектов.
  4. Working with dates in javascript – YouTube — Видеоуроки по работе с датами в JavaScript.
  5. JavaScript Date Objects — Учебник по объектам Date в JavaScript.
  6. date-fns – современная JavaScript библиотека утилит для работы с датами — Описана библиотека для работы с датами в JavaScript.
  7. Moment.js | Docs — Для любителей "старой школы".