網站搜尋

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 成功測試。