2011-07-07 164 views
12
var date1 = new Date(); 
date1.setFullYear(2011, 6, 1); 

// 2011-07-01, ok 
console.log(date1); 

// set date2 the same date as date1 
var date2 = date1; 

// ... 

// now I'm gonna set a new date for date2 
date2.setFullYear(2011, 9, 8); 

// 2011-10-08, ok 
console.log(date2); 

// 2011-10-08, wrong, expecting 2011-07-01 
// I didn't assign a new date to date1 
// WHY is date1 changed? 
console.log(date1); 
+1

它看起來像'date2'被設置爲指向'date1'指向的指針。 – James

回答

19

日期爲對象,因此它被指定爲參考 - 簡單的方法是

date2 = new Date(date1); 
+0

得到它,謝謝SergeS,和以下幫助 – railOne

+1

變種SergeS的答案,但在js中的Date()對象強制編號,所以你不需要getTime(): – yzorg

+0

註釋上,'getTime()'是沒有必要 –

1

兩個日期變量是內存中的同一日期的對象只是引用。所以你需要date2date1克隆。變化:

var date2 = date1; 

這樣:

var date2 = new Date(date1.getTime()); 
0

您需要創建的date1,目前date1date2副本是指在同一日期的對象。

var date2 = new Date(date1.valueOf()); 
1

JavaScript使用由日期*基準通行(以及所有的非原語 - var o = {}; var j = o; j.foo = 1; console.log(o.foo); //1在另一方面,對於數字,字符串和布爾var o = 0; var j = o; j++; console.log(j); // 0),使得預期的行爲。

如果你需要複製一個日期,你可以隨時

var date2 = new Date(date1.getTime()); 

*請參閱意見,明白爲什麼這是不完全正確。

+1

這不是真的通過參考。如果值是參考值,那麼它是按值傳遞的。如果它是通過引用傳遞的,那麼改變引用會改變對象:'a = {}; B = A; b = null;'在通過引用評估模型中,'a === null'應該是true,因爲'b' *是*'a'並且我們將'b'設置爲'null'。 – davin

+0

@達文這是我不知道的微妙之處。 – cwallenpoole

+0

投票。很有幫助。然而一個細節。如果'date2'已經被分配,那麼就不需要使用'new'。分配可以通過:'date2.setTime(date1.valueOf());'完成。 – Karl

1

date2這是對date1的參考。

,達到了預期的效果,請執行下列操作:@ SergeS的回答

var date1 = new Date(); 
date1.setFullYear(2011, 6, 1); 

var date2 = new Date(); 
date2.setTime(date1.valueOf()); 
0

變化,但日期()的JS對象強制爲數字,所以你不需要的getTime():

// general case 
var dateValueCopy = new Date(date1); 

並與OP重申變量名:

var date2 = new Date(date1); 
+0

要顯示日期對象強制編號嘗試:(new Date()* 1) – yzorg

0
<html lang="en"> 
<head> 
<script> 
function getDateDiff(time1, time2) { 
var str1= time1.split('/'); 
var str2= time2.split('/'); 
var t1 = new Date(str1[2], str1[0]-1, str1[1]); 
var t2 = new Date(str2[2], str2[0]-1, str2[1]); 

var diffMS = t1 - t2;  
console.log(diffMS + ' ms'); 

var diffS = diffMS/1000;  
console.log(diffS + ' '); 

var diffM = diffS/60; 
console.log(diffM + ' minutes'); 

var diffH = diffM/60; 
console.log(diffH + ' hours'); 

var diffD = diffH/24; 
console.log(diffD + ' days'); 
alert(diffD); 
} 

//alert(getDateDiff('10/18/2013','10/14/2013')); 
</script> 
</head> 
<body> 
<input type="button" onclick="getDateDiff('10/18/2013','10/14/2013')" value="clickHere()" /> 
</body> 
</html>