如何在JavaScript中克隆Date对象

时间:2009-07-07 07:22:42

标签: javascript

将Date变量分配给另一个变量会将引用复制到SAME值。这意味着改变一个将改变另一个。我怎样才能实际克隆或复制该值?

7 个答案:

答案 0 :(得分:619)

使用Date对象的getTime()方法,该方法返回自1970年1月1日00:00:00(epoch time)以来的毫秒数:

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

在Safari 4中,您还可以写:

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

...但我不确定这是否适用于其他浏览器。 (它似乎适用于IE8)。

答案 1 :(得分:98)

这是最干净的方法

var dat = new Date() 

var copyOf = new Date(dat.valueOf())

答案 2 :(得分:20)

var orig = new Date();
var copy = new Date(+orig);

答案 3 :(得分:15)

简化版:

Date.prototype.clone = function () {
    return new Date(this.getTime());
}

答案 4 :(得分:7)

我发现这个简单的任务也有效:

dateOriginal = new Date();
cloneDate = new Date(dateOriginal);

但我不知道它是多么“安全”。在IE 7和Chrome 19中成功测试。

答案 5 :(得分:1)

如果您要将克隆添加到Date原型,那么您可能希望将其设置为不可枚举...

Date.prototype = Object.defineProperty(Date.prototype, "clone", { 
        value: function (fromDate) { return new Date(fromDate.valueOf()); } 
    });

答案 6 :(得分:0)

function cloneMyDate(oldDate){
  var newDate = new Date(this.oldDate);
}

我将 oldDate 传递给函数并从 this.oldDate 生成 newDate,但它也在更改 this.oldDate。所以我使用了上面的解决方案并且它起作用了。