Date
変数を別の変数に割り当てると、参照が同じインスタンスにコピーされます。つまり、一方を変更すると、もう一方も変更されます。
実際にDate
インスタンスを複製またはコピーするにはどうすればよいですか?
Date
変数を別の変数に割り当てると、参照が同じインスタンスにコピーされます。つまり、一方を変更すると、もう一方も変更されます。
実際にDate
インスタンスを複製またはコピーするにはどうすればよいですか?
回答:
1970年1月1日00:00:00(エポック時間)以降のミリ秒数を返すDateオブジェクトのgetTime()
メソッドを使用します。
var date = new Date();
var copiedDate = new Date(date.getTime());
Safari 4では、次のように書くこともできます。
var date = new Date();
var copiedDate = new Date(date);
...しかし、これが他のブラウザで機能するかどうかはわかりません。(IE8で動作するようです)。
Date.prototype.clone = function() { return new Date(this.getTime()); };
ことです。 これは、次のように使用できますcopiedDate = date.clone();
copiedDate = new Date(date)
アプローチはIE6 +で機能します。Firefoxでは、2つのオプションは同じ速度です。
new Date(date)
同じようにnew Date(date.getTime())
、JSは、呼び出そうとしますのでdate.valueOf()
、それは数を必要とするとき、およびdate.valueOf()
同じであるdate.getTime()
、参照Date.valueOf Object.valueOf
new Date(date)
、使用しnew Date(date.getTime()
たりnew Date(date.valueOf)
最初の方法は、少なくともFirefoxとIE(ないクローム)での日付の間の違いにつながることができますので、代わりに。たとえばtoISOString()
、Firefoxで両方の日付を使用する"2015-04-21T04:56:42.000Z"
と、およびが生成され"2015-04-21T04:56:42.337Z"
ます。
これは最もクリーンなアプローチです
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のエキスパート以外には、その魔法が何をしているかを説明する必要があります。
+
記号はここではunray演算子です。という意味new Date( Number(orig))
です。もっとここに:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
簡略版:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime())
。
この単純な割り当ても機能することがわかりました。
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
しかし、それがどれほど「安全」であるかはわかりません。IE7とChrome 19でのテストに成功。
new Date(date)
、使用しnew Date(date.getTime()
たりnew Date(date.valueOf)
最初の方法は、少なくともFirefoxとIE(ないクローム)での日付の間の違いにつながることができますので、代わりに。たとえばtoISOString()
、Firefoxで両方の日付を使用する"2015-04-21T04:56:42.000Z"
と、およびが生成され"2015-04-21T04:56:42.337Z"
ます。