Призначення 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.
+Знак тут оператор unaray. Це означає 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".