javascript 如何克隆日期对象?

9cbw7uwe  于 2023-01-01  发布在  Java
关注(0)|答案(8)|浏览(229)

将一个Date变量赋给另一个变量会将引用复制到同一个示例。这意味着更改一个变量会更改另一个变量。
我实际上如何克隆或复制Date示例?

ilmyapht

ilmyapht1#

使用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)。

qvk1mo1f

qvk1mo1f2#

这是最干净的方法

let date = new Date() 
let copyOfDate = new Date(date.valueOf())

console.log(date);
console.log(copyOfDate);
ltqd579y

ltqd579y3#

2021年更新

克隆Date对象的概念听起来比实际要宏伟,据我所知,只有一个示例数据,那就是存储的时间,我们真正要做的是用相同的时间创建一个新对象。
无论过去的情况如何,new Date()构造函数都明确地接受Date对象作为单个参数:

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

www.example.com上的Specificationhttps://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date在步骤4(B)中指出Date对象是绝对可以接受的,并且它等价于new Date(date.valueOf()),正如我所说的,您实际上所做的只是创建一个新的Date对象,使其与另一个对象具有相同的时间。
您还将发现https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date上的文档已更新以包含此内容。

gz5pxeao

gz5pxeao4#

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

console.log(orig, copy);
wkyowqbh

wkyowqbh5#

简化版:

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

n3schb8v6#

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

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

但不知有多“安全”,在IE7和Chrome 19中测试成功。

ajsxfq5m

ajsxfq5m7#

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

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

dy2hfwbg

dy2hfwbg8#

对于chrome,它的工作原理是:
//2022年11月3日星期四11:43:00

    • 固定日期=新日期(2022年10月3日11月43日0);

const date2 =新日期(日期);**
现在更改date2不会对日期产生影响

相关问题