2011-07-07 97 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>