将Date
变量分配给另一个变量会将引用复制到同一实例。这意味着更改一个将更改另一个。
我实际上如何克隆或复制Date
实例?
将Date
变量分配给另一个变量会将引用复制到同一实例。这意味着更改一个将更改另一个。
我实际上如何克隆或复制Date
实例?
Answers:
使用Date对象的getTime()
方法,该方法返回自1970年1月1日00:00:00(纪元时间)以来的毫秒数:
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中,两个选项的速度相同。
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(不是Chrome)中的日期之间存在差异。例如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专家以外的任何人解释该魔术的作用。
+
标志在这里是unaray运算符。这意味着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(不是Chrome)中的日期之间存在差异。例如toISOString()
,在Firefox中两个日期同时使用会生成"2015-04-21T04:56:42.000Z"
和"2015-04-21T04:56:42.337Z"
。