1

奇妙な問題があります。指定された日付の月の合計週数を計算する必要があります。

私のロジックは完全に機能しており、正しい週番号が返されますが、問題は、週の計算中に元の日付も変更されたことです。

元の日付を他の変数に保存し、他の変数を関数に渡しましたが、元の日付も変更されています。 元の日付の変更を制限するにはどうすればよいですか?

 var currentDate;
 $(document).ready(function () {
    currentDate = new Date();
 });
function goNextMonth() {
   var dt = currentDate;
   console.log("Before Date: " + currentDate);
   var weeks = getWeeksOfMonth(dt);
   console.log("After Date: " + currentDate + ", Weeks: " + weeks);
}
function getWeeksOfMonth(date) {
    var firstDay = new Date(date.setDate(1)).getDay();
    var totalDays = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();
    return Math.ceil((firstDay + totalDays) / 7);
}

コソールログ: ここに画像の説明を入力

HTMLコード

 <input type="button" value="Next Month" onclick="goNextMonth()" />
4

1 に答える 1

2

この線を回して...

var firstDay = new Date(date.setDate(1)).getDay();

...これに:

var dateClone = new Date(date);
dateClone.setDate(1);
var firstDay = dateClone.getDay();

問題は、date.setDate(1)式を使用して元の日付オブジェクトを変更することです (この関数にパラメーターとして渡されます)。明らかに、それはあなたが望むものではありません。

于 2013-06-14T07:00:57.777 に答える