Присвоение Dateпеременной другой скопирует ссылку на тот же экземпляр. Это означает, что изменение одного изменит другое.
Как я могу на самом деле клонировать или скопировать Dateэкземпляр?
Присвоение Dateпеременной другой скопирует ссылку на тот же экземпляр. Это означает, что изменение одного изменит другое.
Как я могу на самом деле клонировать или скопировать Dateэкземпляр?
Ответы:
Используйте метод объекта DategetTime() , который возвращает количество миллисекунд с 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).
Date.prototype.clone = function() { return new Date(this.getTime()); }; который вы могли бы затем использовать какcopiedDate = date.clone();
copiedDate = new Date(date)Подход работает в IE6 +. В Firefox оба варианта имеют одинаковую скорость.
new Date(date)так же, как new Date(date.getTime()), потому что JS будет пытаться звонить, date.valueOf()когда ему нужен номер, и date.valueOf()аналогичен date.getTime()ссылке Date.valueOf Object.valueOf
new Date(date), используйте new Date(date.getTime()или new Date(date.valueOf)вместо этого, так как первый способ может привести к различиям между датами по крайней мере в Firefox и IE (не в Chrome). Например, использование toISOString()обеих дат в Firefox создает "2015-04-21T04:56:42.000Z"и "2015-04-21T04:56:42.337Z".
Это самый чистый подход
let dat = new Date()
let copyOf = new Date(dat.valueOf())
console.log(dat);
console.log(copyOf);
var orig = new Date();
var copy = new Date(+orig);
+делает никому, кроме экспертов JS.
+знак является единственным оператором здесь. Значит new Date( Number(orig)) . Подробнее здесь: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Упрощенная версия:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime()).
Я узнал, что это простое назначение также работает:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Но я не знаю, насколько это безопасно. Успешно протестировано в IE7 и Chrome 19.
new Date(date), используйте new Date(date.getTime()или new Date(date.valueOf)вместо этого, так как первый способ может привести к различиям между датами по крайней мере в Firefox и IE (не в Chrome). Например, использование toISOString()обеих дат в Firefox создает "2015-04-21T04:56:42.000Z"и "2015-04-21T04:56:42.337Z".