Menetapkan Date
variabel ke variabel lain akan menyalin referensi ke instance yang sama. Ini berarti bahwa mengubah yang satu akan mengubah yang lain.
Bagaimana saya bisa benar-benar mengkloning atau menyalin Date
contoh?
Menetapkan Date
variabel ke variabel lain akan menyalin referensi ke instance yang sama. Ini berarti bahwa mengubah yang satu akan mengubah yang lain.
Bagaimana saya bisa benar-benar mengkloning atau menyalin Date
contoh?
Jawaban:
Gunakan metode objek DategetTime()
, yang mengembalikan jumlah milidetik sejak 1 Januari 1970 00:00:00 ( waktu zaman ):
var date = new Date();
var copiedDate = new Date(date.getTime());
Di Safari 4, Anda juga dapat menulis:
var date = new Date();
var copiedDate = new Date(date);
... tapi saya tidak yakin apakah ini berfungsi di browser lain. (Tampaknya berfungsi di IE8).
Date.prototype.clone = function() { return new Date(this.getTime()); };
Yang kemudian bisa Anda gunakan sebagaicopiedDate = date.clone();
copiedDate = new Date(date)
Pendekatan bekerja di IE6 +. Di Firefox, dua opsi memiliki kecepatan yang sama.
new Date(date)
sama dengan new Date(date.getTime())
, karena JS akan mencoba menelepon date.valueOf()
ketika memerlukan nomor, dan date.valueOf()
sama dengan date.getTime()
, referensi Date.valueOf Object.valueOf
new Date(date)
, gunakan new Date(date.getTime()
atau new Date(date.valueOf)
sebaliknya karena cara pertama dapat menyebabkan perbedaan antara tanggal di setidaknya Firefox dan IE (bukan Chrome). Misalnya menggunakan toISOString()
pada kedua tanggal di Firefox menghasilkan "2015-04-21T04:56:42.000Z"
dan "2015-04-21T04:56:42.337Z"
.
Ini adalah pendekatan terbersih
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);
+
itu kepada siapa pun kecuali ahli JS.
+
tandanya operator unaray di sini. Artinya new Date( Number(orig))
. Lebih lanjut di sini: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Versi sederhana:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime())
.
Saya menemukan bahwa tugas sederhana ini juga berfungsi:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Tapi saya tidak tahu seberapa "aman" itu. Berhasil diuji di IE7 dan Chrome 19.
new Date(date)
, gunakan new Date(date.getTime()
atau new Date(date.valueOf)
sebaliknya karena cara pertama dapat menyebabkan perbedaan antara tanggal di setidaknya Firefox dan IE (bukan Chrome). Misalnya menggunakan toISOString()
pada kedua tanggal di Firefox menghasilkan "2015-04-21T04:56:42.000Z"
dan "2015-04-21T04:56:42.337Z"
.