Присвоение Date
переменной другой скопирует ссылку на тот же экземпляр. Это означает, что изменение одного изменит другое.
Как я могу на самом деле клонировать или скопировать Date
экземпляр?
javascript
Árvíztűrő tükörfúrógép
источник
источник
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.valueOfnew 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"
.Это самый чистый подход
источник
источник
+
делает никому, кроме экспертов JS.+
знак является единственным оператором здесь. Значитnew Date( Number(orig))
. Подробнее здесь: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Упрощенная версия:
источник
const cloneDate = d => new Date(d.getTime())
.Я узнал, что это простое назначение также работает:
Но я не знаю, насколько это безопасно. Успешно протестировано в 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"
.