How to clone a Date object in JavaScript

How to clone a Date object in JavaScript

Assigning a Date variable to another one will copy the reference to the SAME value. This means that changing one will change the other. How can I actually clone or copy the value?


Solution 1:

Use the Date object’s getTime() method, which returns the number of milliseconds since 1 January 1970 00:00:00 (epoch time):

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

In Safari 4, you can also write:

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

…but I’m not sure whether this works in other browsers. (It seems to work in IE8).

Solution 2:

This is the cleanest approach

var dat = new Date() 

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

Solution 3:

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

Solution 4:

Simplified version:

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

Solution 5:

I found out that this simple assignmnent also works:

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

But I don’t know how “safe” it is. Successfully tested in IE7 and Chrome 19.

Solution 6:

If you’re going to add clone to Date prototype, then you might want to make it non-enumerable…

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