获得该月的总周数时出现奇怪的行为

时间:2013-06-14 06:55:27

标签: javascript datetime

我有奇怪的问题。我必须计算给定日期月的总周数。

我的逻辑工作正常,它将返回正确的周数,但问题是我的原始日期在计算周期间也发生了变化。

我已将原始日期存储在其他变量中并将其他变量传递给该函数,但原始日期仍然会发生变化。 如何限制更改原始日期?

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

Cosole日志: enter image description here

HTML代码

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

1 个答案:

答案 0 :(得分:2)

转这一行...

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

......进入这个:

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

问题是使用date.setDate(1)表达式更改原始日期对象(作为参数传递给此函数)。显然,这不是你想要的。