javascript - 如何複製一個 Date 物件?
將一個 Date 變數指派給另一個變數會複製對同一個實例的引用。這意味著更改其中一個會改變另一個。
我實際上如何複製或拷貝一個 Date 實例?
答案#1
使用 Date 物件的 getTime() 方法,它會回傳自 1970 年 1 月 1 日 00:00:00 UTC(紀元時間)以來的毫秒數:
var date = new Date();
var copiedDate = new Date(date.getTime());
在 Safari 4 中,你也可以寫:
var date = new Date();
var copiedDate = new Date(date);
...但我不確定這在其他瀏覽器是否可行。(似乎在 IE8 中可以使用)。
答案#2
這是最乾淨的方法
let date = new Date()
let copyOfDate = new Date(date.valueOf())
console.log(date);
console.log(copyOfDate);答案#3
2021 年更新:
在某種程度上,克隆一個 Date 對象的概念聽起來比實際上要宏大。據我所知,它只有一個實例數據,那就是存儲的時間。我們真正做的其實是創建一個具有相同時間的新對象。
不論過去情況如何,new Date() 建構函數確實可以接受一個 Date 物件作為單一參數:
const date = new Date(); // With or without an argument.
const date2 = new Date(date); // Clone original date.
在 https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date 的規範中,步驟 4(b) 指出 Date 物件是絕對可以接受的,並且這等同於 new Date(date.valueOf()),如上面的一些回答所建議的。正如我所說,你真正做的只是使用與另一個相同的時間建立一個新的 Date 物件。
你還會發現,位於 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date 的文件已經更新以包含這一點。
答案#4
var orig = new Date();
var copy = new Date(+orig);
console.log(orig, copy);答案#5
簡化版本:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
答案#6
我發現這個簡單的作業也管用:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
但我不知道它有多「安全」。已在 IE7 和 Chrome 19 成功測試。
