Przypisanie Datezmiennej do innej spowoduje skopiowanie odwołania do tego samego wystąpienia. Oznacza to, że zmiana jednego zmieni drugie.
Jak mogę faktycznie sklonować lub skopiować Dateinstancję?
Przypisanie Datezmiennej do innej spowoduje skopiowanie odwołania do tego samego wystąpienia. Oznacza to, że zmiana jednego zmieni drugie.
Jak mogę faktycznie sklonować lub skopiować Dateinstancję?
Odpowiedzi:
Użyj metody obiektu DategetTime() , która zwraca liczbę milisekund od 1 stycznia 1970 r. 00:00:00 ( czas epoki ):
var date = new Date();
var copiedDate = new Date(date.getTime());
W Safari 4 możesz także napisać:
var date = new Date();
var copiedDate = new Date(date);
... ale nie jestem pewien, czy to działa w innych przeglądarkach. (Wydaje się, że działa w IE8).
Date.prototype.clone = function() { return new Date(this.getTime()); }; którego można następnie użyć jakocopiedDate = date.clone();
copiedDate = new Date(date)Podejście działa w IE6 +. W przeglądarce Firefox dwie opcje mają tę samą prędkość.
new Date(date)to samo new Date(date.getTime()), ponieważ JS spróbuje zadzwonić, date.valueOf()gdy będzie potrzebować numeru, i date.valueOf()jest taki sam jak date.getTime()odnośnik Date.valueOf Object.valueOf
new Date(date), używaj new Date(date.getTime()lub new Date(date.valueOf)zamiast tego, ponieważ pierwszy sposób może prowadzić do różnic między datami przynajmniej w przeglądarce Firefox i IE (nie w Chrome). Na przykład używanie toISOString()w obu datach w przeglądarce Firefox generuje "2015-04-21T04:56:42.000Z"i "2015-04-21T04:56:42.337Z".
To jest najczystsze podejście
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);
+robi każdemu oprócz ekspertów JS.
+znak jest tutaj nierealnym operatorem. Oznacza to new Date( Number(orig)) . Więcej tutaj: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Wersja uproszczona:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime()).
Dowiedziałem się, że to proste przypisanie działa również:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
Ale nie wiem, jak to jest „bezpieczne”. Pomyślnie przetestowany w IE7 i Chrome 19.
new Date(date), używaj new Date(date.getTime()lub new Date(date.valueOf)zamiast tego, ponieważ pierwszy sposób może prowadzić do różnic między datami przynajmniej w przeglądarce Firefox i IE (nie w Chrome). Na przykład używanie toISOString()w obu datach w przeglądarce Firefox generuje "2015-04-21T04:56:42.000Z"i "2015-04-21T04:56:42.337Z".