Durch Zuweisen einer DateVariablen zu einer anderen wird der Verweis auf dieselbe Instanz kopiert. Dies bedeutet, dass das Ändern des einen das andere ändert.
Wie kann ich eine DateInstanz tatsächlich klonen oder kopieren ?
Durch Zuweisen einer DateVariablen zu einer anderen wird der Verweis auf dieselbe Instanz kopiert. Dies bedeutet, dass das Ändern des einen das andere ändert.
Wie kann ich eine DateInstanz tatsächlich klonen oder kopieren ?
Antworten:
Verwenden Sie die Methode des Date- Objekts getTime(), die die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 ( Epochenzeit ) zurückgibt :
var date = new Date();
var copiedDate = new Date(date.getTime());
In Safari 4 können Sie auch schreiben:
var date = new Date();
var copiedDate = new Date(date);
... aber ich bin mir nicht sicher, ob dies in anderen Browsern funktioniert. (Es scheint in IE8 zu funktionieren).
Date.prototype.clone = function() { return new Date(this.getTime()); }; Sie dann alscopiedDate = date.clone();
copiedDate = new Date(date)Ansatz funktioniert in IE6 +. In Firefox haben beide Optionen die gleiche Geschwindigkeit.
new Date(date)das gleiche wie new Date(date.getTime()), weil JS versuchen wird anzurufen, date.valueOf()wenn es eine Nummer benötigt, und date.valueOf()das gleiche ist wie die date.getTime()Referenz Date.valueOf Object.valueOf
new Date(date), verwenden new Date(date.getTime()oder new Date(date.valueOf)stattdessen, da der erste Weg zu Unterschieden zwischen den Daten in mindestens Firefox und IE (nicht Chrome) führen kann. Wenn Sie beispielsweise toISOString()an beiden Daten in Firefox verwenden, werden "2015-04-21T04:56:42.000Z"und generiert "2015-04-21T04:56:42.337Z".
Dies ist der sauberste Ansatz
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);
+jedem außer JS-Experten erklären, was diese Magie tut.
+Zeichen ist unaray Betreiber hier. Es bedeutet new Date( Number(orig)) . Mehr hier: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Vereinfachte Version:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime()).
Ich fand heraus, dass diese einfache Zuweisung auch funktioniert:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Aber ich weiß nicht, wie "sicher" es ist. Erfolgreich in IE7 und Chrome 19 getestet.
new Date(date), verwenden new Date(date.getTime()oder new Date(date.valueOf)stattdessen, da der erste Weg zu Unterschieden zwischen den Daten in mindestens Firefox und IE (nicht Chrome) führen kann. Wenn Sie beispielsweise toISOString()an beiden Daten in Firefox verwenden, werden "2015-04-21T04:56:42.000Z"und generiert "2015-04-21T04:56:42.337Z".