2013-07-26 36 views
0

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

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/

预先感谢您

回答

3

你可能会认为这两行复制到dateInputprevWeekprevMonth

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代表时间的同一时刻。

+0

我觉得最大的旋钮。我有: var prevWeek = new Date(dateInput); var prevMonth = new Date(dateInput); 在DreamWeaver中注释掉和隐藏了..我一直在研究这个太久了,谢谢谢谢谢谢先生! –

相关问题