将Date变量赋值给另一个变量会将引用复制到同一个实例。这意味着改变一个会改变另一个。
Date
我如何实际克隆或复制Date实例?
使用日期对象的getTime()方法,该方法返回自1970年1月1日00:00:00 UTC (时代的时间)以来的毫秒数:
getTime()
var date = new Date(); var copiedDate = new Date(date.getTime());
在Safari 4中,你还可以这样写:
var date = new Date(); var copiedDate = new Date(date);
...但我不确定这是否适用于其他浏览器。(它似乎在IE8中工作)。
这是最干净的方法
let date = new Date() let copyOfDate = new Date(date.valueOf()) console.log(date); console.log(copyOfDate);
简化版:
Date.prototype.clone = function () { return new Date(this.getTime()); }
我发现这个简单的作业也可以:
dateOriginal = new Date(); cloneDate = new Date(dateOriginal);
但我不知道它有多“安全”。已在IE7和Chrome 19中成功测试。
var orig = new Date(); var copy = new Date(+orig); console.log(orig, copy);
function cloneMyDate(oldDate){ var newDate = new Date(this.oldDate); }
我将oldDate传递给函数并从中生成newDate。oldDate,但是它正在改变这个。oldDate也。所以我使用上面的解决方案,它工作。
在某一方面,克隆Date对象的概念听起来比实际情况要宏大。据我所知,只有一个实例数据,那就是存储的时间。我们实际上是在用相同的时间创建一个新对象。
不管过去是什么情况,new Date()构造函数肯定接受Date对象作为单个参数:
new Date()
const date = new Date(); // With or without an argument. const date2 = new Date(date); // Clone original date.
步骤4(b)中https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date的规范表明Date对象绝对是可以接受的,并且这与new Date(date.valueOf())是等价的,正如上面的一些答案所建议的那样。正如我所说的,你真正要做的是创建一个新的Date对象,与其他对象的时间相同。
new Date(date.valueOf())
您还会发现,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date的文档已经更新到包含这些内容。
对于铬,它工作:
// 2022年11月3日星期四11:43:00
**const date = new date (202,10,03,11,43,0);
const date2 = new Date(Date)
现在更改date2将不会对日期产生影响