Как клонировать объект Date?

Присвоение переменной Date другой копирует ссылку на тот же экземпляр. Это означает, что изменение одного изменит другой.

Как я могу на самом деле клонировать или скопировать экземпляр Date?

Ответ 1

Используйте Date объект getTime() метод, который возвращает число миллисекунд с 1 января 1970 года 00:00:00 (время в эпоху):

var date = new Date();
var copiedDate = new Date(date.getTime());

В Safari 4 вы также можете написать:

var date = new Date();
var copiedDate = new Date(date);

... но я не уверен, работает ли это в других браузерах. (Кажется, это работает в IE8).

Ответ 2

Это самый чистый подход

var dat = new Date() 

var copyOf = new Date(dat.valueOf())

Ответ 3

var orig = new Date();
var copy = new Date(+orig);

Ответ 4

Упрощенная версия:

Date.prototype.clone = function () {
    return new Date(this.getTime());
}

Ответ 5

Я узнал, что это простое назначение также работает:

dateOriginal = new Date();
cloneDate = new Date(dateOriginal);

Но я не знаю, как это "безопасно". Успешно протестирован в IE7 и Chrome 19.

Ответ 6

Если вы собираетесь добавить клон к прототипу Date, то вы можете сделать его неперечислимым...

Date.prototype = Object.defineProperty(Date.prototype, "clone", { 
        value: function (fromDate) { return new Date(fromDate.valueOf()); } 
    });

Ответ 7

вы можете использовать универсальный метод:

  • Дата

    var new_date = $.extend(new Date(), current_date);
    
  • Объект

    var new_object = $.extend({}, current_object);
    

и другие...