Javascript日期变量赋值

时间:2011-07-07 11:02:12

标签: javascript variables date

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);

7 个答案:

答案 0 :(得分:21)

日期是对象,因此它被指定为参考 - 简单方法是

date2 = new Date( date1 );

答案 1 :(得分:1)

两个日期变量都只是对内存中相同日期对象的引用。因此,您需要date2成为date1克隆。变化:

var date2 = date1;

到此:

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

答案 2 :(得分:1)

JavaScript使用Dates *的引用传递(以及所有非基元 - var o = {}; var j = o; j.foo = 1; console.log(o.foo); //1。另一方面,对于Numbers,Strings和Booleans var o = 0; var j = o; j++; console.log(j); // 0),这是预期的行为。

如果您需要复制日期,您可以随时

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

*请参阅评论以了解为什么这不完全正确。

答案 3 :(得分:1)

date2这是对date1的引用。

要达到预期效果,请执行以下操作:

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

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

答案 4 :(得分:0)

您需要创建date1的副本,当前date1date2引用相同的日期对象。

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

答案 5 :(得分:0)

@ SergeS答案的变化,但js中的Date()对象强制为数字,所以你不需要getTime():

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

用OP变量名称重述:

var date2 = new Date(date1);

答案 6 :(得分: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>