Bir Date
değişkene başka bir değişken atamak , referansı aynı örneğe kopyalar. Bu, birinin değiştirilmesinin diğerini değiştireceği anlamına gelir.
Bir Date
örneği nasıl klonlayabilir veya kopyalayabilirim ?
Bir Date
değişkene başka bir değişken atamak , referansı aynı örneğe kopyalar. Bu, birinin değiştirilmesinin diğerini değiştireceği anlamına gelir.
Bir Date
örneği nasıl klonlayabilir veya kopyalayabilirim ?
Yanıtlar:
Date nesnesinin getTime()
1 Ocak 1970 00:00:00 ( dönem ) tarihinden sonraki milisaniye sayısını döndüren yöntemini kullanın :
var date = new Date();
var copiedDate = new Date(date.getTime());
Safari 4'te şunları da yazabilirsiniz:
var date = new Date();
var copiedDate = new Date(date);
... ancak bunun diğer tarayıcılarda çalışıp çalışmadığından emin değilim. (IE8'de çalışıyor gibi görünüyor).
Date.prototype.clone = function() { return new Date(this.getTime()); };
Daha sonra şu şekilde kullanabilirsinizcopiedDate = date.clone();
copiedDate = new Date(date)
Yaklaşım IE6 + çalışır. Firefox'ta iki seçenek aynı hızda.
new Date(date)
Aynı şekilde new Date(date.getTime())
, JS aramaya çalışacağız çünkü date.valueOf()
bu bir numara gerektiğinde ve date.valueOf()
aynıdır date.getTime()
, referans Date.valueOf Object.valueOf
new Date(date)
, kullanmayın new Date(date.getTime()
veya new Date(date.valueOf)
bunun yerine ilk yol en azından Firefox ve IE (Chrome değil) içindeki tarihler arasında farklılıklara yol açabilir. Örneğin toISOString()
Firefox'ta her iki tarihte kullanmak "2015-04-21T04:56:42.000Z"
ve üretir "2015-04-21T04:56:42.337Z"
.
Bu en temiz yaklaşım
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 uzmanları dışında herkese ne yaptığını açıklamanız gerekecek .
+
burcu unaray operatörü burada. Bu demektir new Date( Number(orig))
. Daha fazla burada: developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Basitleştirilmiş sürüm:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime())
.
Bu basit atamanın da işe yaradığını öğrendim:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Ama bunun ne kadar "güvenli" olduğunu bilmiyorum. IE7 ve Chrome 19'da başarıyla test edildi.
new Date(date)
, kullanmayın new Date(date.getTime()
veya new Date(date.valueOf)
bunun yerine ilk yol en azından Firefox ve IE (Chrome değil) içindeki tarihler arasında farklılıklara yol açabilir. Örneğin toISOString()
Firefox'ta her iki tarihte kullanmak "2015-04-21T04:56:42.000Z"
ve üretir "2015-04-21T04:56:42.337Z"
.