QA@IT

JavaScriptのDate インスタンスを複製するには?

15558 PV

Date変数を他の変数に代入すると参照渡しになります。コピー先の変数を変更すると元の値も変わってしまいます。
インスタンスをクローンしたり、値渡したりするにはどうしたらいいでしょうか?

var one = new Date();
var another = one;
another.setDate(1);  //oneも変わってしまう

回答

var one = new Date();
var another = new Date(one.getTime());

でいかがでしょうか。

JavaScriptでのオブジェクトのクローンは、そのオブジェクトに紐付いているprototypeプロパティをコピーしてしまわないように考えないといけないので、単なるディープコピーではダメで、汎用的な方法はないという話です。Arrayだと、arr.slice(0) といったイディオムを見かけます。sliceは新規にArrayオブジェクトを作って返すので、インデックスが0のところから切り出すと、clone相当という。

参考:
Copying an Object in Javascript

編集 履歴 (0)

Use the Date object's getTime() method, which returns the number of milliseconds since 1 January 1970 00:00:00 (epoch time):

var date = new Date();
var copiedDate = new Date(date.getTime());

In Safari 4, you can also write:

var date = new Date();
var copiedDate = new Date(date);

http://stackoverflow.com/questions/1090815/how-to-clone-a-date-object-in-javascript
http://www.jpcert.or.jp/java-rules/obj04-j.html
http://www.witdeals.com/pens-pencils/p-2114.html

編集 履歴 (0)
  • ありがとうございます。
    リンクの内下二つは関係ないようです。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。