给另一个Date变量赋值会将引用复制到相同的实例。这意味着改变一个会改变另一个。

我如何实际克隆或复制一个日期实例?


当前回答

var orig = new Date(); var copy = new Date(+ origin); console.log(源自,复制);

其他回答

var orig = new Date(); var copy = new Date(+ origin); console.log(源自,复制);

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

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

在Safari 4中,你还可以这样写:

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

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

2021年更新

在某一方面,克隆Date对象的概念听起来比实际情况要宏大。据我所知,只有一个实例数据,那就是存储的时间。我们实际上是在用相同的时间创建一个新对象。

不管过去是什么情况,新的Date()构造函数肯定接受Date对象作为单个参数:

const date = new Date();        // With or without an argument.
const date2 = new Date(date);   // Clone original date.

https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date第4步(b)中的规范表明Date对象绝对是可以接受的,这相当于new Date(Date . valueof()),正如上面的一些答案所建议的那样。正如我所说,您实际上所做的只是创建一个与其他Date对象时间相同的新Date对象。

您还会发现https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date上的文档已经更新,包括了这一点。

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

我将oldDate传递给函数并从中生成newDate。oldDate,但是它正在改变这个。oldDate也。所以我使用上面的解决方案,它工作。

这是最干净的方法

let date = new date () let copyOfDate = new Date(Date . valueof ()) console.log(日期); console.log (copyOfDate);