1

私はdateJSを始めたばかりで、すばらしいlibのように見えますが、明らかに何かが欠けています(おそらくばかげた間違い)が、私の関数では、clickedDate、weekStart、weekEndの3つの日付が必要です。しかし、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)}
4

1 に答える 1

3

これはDatejsの問題ではありませんが、JavaScript Dateオブジェクトの機能(?)です。JavaScriptでは、Dateオブジェクトは変更可能であり、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を使用する場合にこれを回避する方法は、Dateオブジェクトを「複製」することです。次のサンプルは.clone()、「b」および「c」Dateオブジェクトでの関数の使用法を示しています。

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

上記を実行すると、「a」が変更された場合でも、「b」と「c」の最終結果が元の値を反映していることがわかります。

お役に立てれば。

于 2011-11-21T23:21:38.690 に答える