Việc gán một Date
biến cho một biến khác sẽ sao chép tham chiếu vào cùng một thể hiện. Điều này có nghĩa là thay đổi cái này sẽ thay đổi cái khác.
Làm thế nào tôi thực sự có thể sao chép hoặc sao chép một Date
ví dụ?
Việc gán một Date
biến cho một biến khác sẽ sao chép tham chiếu vào cùng một thể hiện. Điều này có nghĩa là thay đổi cái này sẽ thay đổi cái khác.
Làm thế nào tôi thực sự có thể sao chép hoặc sao chép một Date
ví dụ?
Câu trả lời:
Sử dụng phương thức của đối tượng DategetTime()
, trả về số mili giây kể từ ngày 1 tháng 1 năm 1970 00:00:00 ( thời gian kỷ nguyên ):
var date = new Date();
var copiedDate = new Date(date.getTime());
Trong Safari 4, bạn cũng có thể viết:
var date = new Date();
var copiedDate = new Date(date);
... nhưng tôi không chắc liệu điều này có hoạt động trong các trình duyệt khác không. (Nó dường như hoạt động trong IE8).
Date.prototype.clone = function() { return new Date(this.getTime()); };
đó bạn có thể sử dụng nhưcopiedDate = date.clone();
copiedDate = new Date(date)
tiếp cận hoạt động trong IE6 +. Trong Firefox hai tùy chọn có cùng tốc độ.
new Date(date)
tương tự new Date(date.getTime())
, bởi vì JS sẽ cố gắng gọi date.valueOf()
khi nó cần một số và date.valueOf()
giống như date.getTime()
, tham chiếu Date.valueOf Object.valueOf
new Date(date)
, sử dụng new Date(date.getTime()
hoặc new Date(date.valueOf)
thay vào đó vì cách đầu tiên có thể dẫn đến sự khác biệt giữa các ngày trong ít nhất Firefox và IE (không phải Chrome). Ví dụ: sử dụng toISOString()
cả hai ngày trong Firefox tạo "2015-04-21T04:56:42.000Z"
và "2015-04-21T04:56:42.337Z"
.
Đây là cách tiếp cận sạch nhất
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);
+
đang làm với bất kỳ ai trừ các chuyên gia về JS.
+
ký là nhà điều hành unaray ở đây. Nó có nghĩa là new Date( Number(orig))
. Xem thêm tại đây: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
Phiên bản đơn giản hóa:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime())
.
Tôi phát hiện ra rằng nhiệm vụ đơn giản này cũng hoạt động:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Nhưng tôi không biết nó "an toàn" đến mức nào. Đã thử nghiệm thành công trong IE7 và Chrome 19.
new Date(date)
, sử dụng new Date(date.getTime()
hoặc new Date(date.valueOf)
thay vào đó vì cách đầu tiên có thể dẫn đến sự khác biệt giữa các ngày trong ít nhất Firefox và IE (không phải Chrome). Ví dụ: sử dụng toISOString()
cả hai ngày trong Firefox tạo "2015-04-21T04:56:42.000Z"
và "2015-04-21T04:56:42.337Z"
.