2011-11-09 178 views
1

我刚刚开始使用dateJS,它似乎是一个很好的lib,但我显然错过了一些东西(可能是一个愚蠢的错误),但在我的函数中,我需要3个日期:clickedDate,weekStart & weekEnd。但使用dateJS我似乎覆盖每个变量。有人能指出我的错误吗?dateJS覆盖变量

var clickDate = myDate; 
    console.log(clickDate); 
var weekStart = Date.parse(clickDate).last().monday(); 
    console.log(clickDate); 
var weekEnd = Date.parse(clickDate).next().sunday(); 
    console.log(weekEnd); 

console.log('break'); 

console.log(clickDate); 
console.log(weekStart); 
console.log(weekEnd); 

控制台显示以下

Date {Wed Nov 30 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
Date {Mon Nov 28 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
break 
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
Date {Sun Dec 04 2011 00:00:00 GMT-0700 (US Mountain Standard Time)} 
+2

[SSCCE](http://sscce.org)。一个很棒的JavaScript SSCCE工具:http://jsfiddle.net。什么是'myDate',一个字符串?顺便说一句,你是否想'console.log(clickDate)'连续两次? –

+0

[It works for me](http://jsfiddle.net/LJJKn/)。 –

+0

使用更多全局变量 –

回答

3

这不是Datejs问题,但JavaScript的Date对象的特征(?)。在JavaScript中,Date对象是可变的,并且将对象值设置为新变量会创建对原始对象的引用,而不是新对象。

这可以使用普通的旧的JavaScript(无Datejs)证明:

〔实施例

var a = new Date(2011, 0, 1); 
var b = a; 
var c = b; 

console.log('a', a); // 1-Jan-2011 
console.log('b', b); // 1-Jan-2011 
console.log('c', c); // 1-Jan-2011 

// setting only 'a' will cause 'b' and 'c' to update as well. 
a.setDate(10); 

console.log('a', a); // 10-Jan-2011 
console.log('b', b); // 10-Jan-2011 
console.log('c', c); // 10-Jan-2011 

来解决这一点,如果使用Datejs是 “克隆” 的日期对象的方式。以下示例演示在'b'和'c'Date对象上使用.clone()函数。

var a = new Date(2011, 0, 1); 
var b = a.clone(); // clone creates a new 'copy' of 'a'. 
var c = b.clone(); 

console.log('a', a); // 1-Jan-2011 
console.log('b', b); // 1-Jan-2011 
console.log('c', c); // 1-Jan-2011 

a.setDate(10); 

console.log('a', a); // 10-Jan-2011 
console.log('b', b); // 1-Jan-2011 
console.log('c', c); // 1-Jan-2011 

运行上面,你会看到“B”和“C”的最终结果仍反映其原始值,即使“A”发生了变化。

希望这会有所帮助。

+3

Javascript * Date是可变的*,并非如所述的不可变。这是一个参考类型,是正确的。但是引用与值类型是一个方面,而可变性则是完全不同的东西。如果一切都很好,那么Date就是(1.)不变的(2.)值类型,就像在.Net中一样。 – citykid