函数中的2个变量获得相同的日期值

时间:2013-07-26 04:14:04

标签: javascript jquery date

我的约会有一个小问题。我有一个接收日期的函数,并存储在一些变量中。我将传入日期设置为两个变量的不同日期,但运行时,它们是相同的。以下是一个片段

function dateChange(dateInput){
var prevWeek = dateInput; 
var prevMonth = dateInput;
prevWeek.setDate(prevWeek.getDate()-7);
prevMonth.setDate(prevMonth.getDate()-30); 

 var $prev_month_link = $( '<a>' )
      .html( "month" )
      .click(function(event){
          //prevMonth = new Date();
          alert("click prevMonth: "+prevMonth);
        //dateChange( prevMonth ) 
        prevMonth = prevMonth.substring(3,5)+"/"+prevMonth.substring(0,2)+"/"+prevMonth.substring(6,10)
        var prevMonth2 = new Date(prevMonth);
        //alert("line 132, current2 is: "+prevMonth2);
        dateChange(prevMonth2);
        event.stopPropagation();
      })
      .addClass("prevMonth")
      .attr('data-name', prevMonth)
      .appendTo( $prev_container )

      var $prev_week_link = $( '<a>' )
      .html( "week" )
      .click(function(event){
          alert("click prevWeek: "+prevWeek);
        prevWeek = prevWeek.substring(3,5)+"/"+prevWeek.substring(0,2)+"/"+prevWeek.substring(6,10)
        var prevWeek2 = new Date(prevWeek);
        dateChange( prevWeek2 ) 
        event.stopPropagation();
      })
      .addClass("prevWeek")
      .attr('data-name', prevWeek)
      .appendTo( $prev_container )
}

我的问题是prevWeek和prevMonth有相同的日期,即使我设置不同。我不确定是不是因为发生了点击事件。 例如,您可以在此处看到http://www.ccy.com.au/availability/

提前谢谢

1 个答案:

答案 0 :(得分:3)

您可能认为这两行将dateInput复制为prevWeekprevMonth

var prevWeek = dateInput; 
var prevMonth = dateInput;

不是这样。它们使prevWeekprevMonth指向同一个地方。然后当你调用它们的方法时:

prevWeek.setDate(prevWeek.getDate()-7);
prevMonth.setDate(prevMonth.getDate()-30); 

你只是改变了他们指向的对象;它相当于

dateInput.setDate(dateInput.getDate()-7);
dateInput.setDate(dateInput.getDate()-30); 

可能不是你想要的。要实际复制日期,请使用new Date,将其传递给您要复制的日期:

var prevWeek = new Date(dateInput); 
var prevMonth = new Date(dateInput);

这使得他们每个人都指向一个新的,不相同的Date代表同一时刻。