Javascript约会到数组

时间:2014-07-18 14:26:32

标签: javascript arrays date datepicker

我正在一个用户可以预订度假屋的网站上工作。 预订时间为周六至周六。如果用户单击该周中的任何日期,则必须选择整周。我有那部分工作。

我在"date-range-selected"课程中选择了所选日期。如果第一天已经预订,但仅在早上,我就给了它"half-selected"课程。现在,因为我需要计算这些日期,我需要完整的日期,而不仅仅是日期编号。只需将"half-selected""date-range-selected"添加到数组中。

我试图将变量推送到该数组并且它似乎有效,但是当我尝试在for循环之后使用数组时,似乎所有数组内容都更改为最后一个选定日期之后的日期,我是什么做错了?

//ex.selected dates are: 9-16 august
var halfke= document.getElementsByClassName("half-selected"); 
var rest = document.getElementsByClassName("date-range-selected");
var dagen = [];
if(typeof halfke[0] != 'undefined')
{
    dagen.push(halfke[0].getElementsByClassName("ui-state-default")[0].innerHTML.trim());
}
for (index = 0; index < rest.length; ++index) 
{
    dagen.push(rest[index].getElementsByClassName("ui-state-default")[0].innerHTML.trim());
}

var myDate = new Date(cur);
var dw = myDate.getDay();
myDate.setDate(myDate.getDate() - (dw+1));
var myDate2 = new Date(cur);
myDate2.setDate(myDate2.getDate() + (6-dw));
//alert(dagen[0]);
var juiste_dagen = new Array();
for (var d = myDate; d <= myDate2; d.setDate(d.getDate() + 1)) {
   //alert(dagen[0]+ " - " + String(d.getDate()))
   if(dagen.indexOf(String(d.getDate()))>-1)
   {
     //alert(d);
    juiste_dagen.push(d);
    alert(juiste_dagen[0]);//here it alerts 9 august (as it should)
    }
}
alert("done");
alert(juiste_dagen[0]);//here it alerts 17 august(which it should not do)
alert(juiste_dagen[1]);//here it alerts 17 august(which it should not do)
alert(juiste_dagen[2]);//here it alerts 17 august(which it should not do)

这可能是一些小而愚蠢的东西,但我似乎无法找到它。 任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

这是一个传递参考问题,它按预期工作。基元(如数字和字符串)是按值传递的。 Date是一个对象,它通过引用传递,这意味着无需复制。传递Date对象的每个地方都是相同的日期。请查看以下代码,刚刚在我的Chrome控制台中进行了测试:

var myDate = new Date();
undefined
var juiste_dagen = [];
undefined
juiste_dagen.push(myDate);
1
juiste_dagen[0];
Fri Jul 18 2014 09:35:02 GMT-0500 (CDT)
myDate.setDate(19);
1405780502241
juiste_dagen[0];
Sat Jul 19 2014 09:35:02 GMT-0500 (CDT)

所以问题出现在你最后的forloop d.setDate(d.getDate() + 1)。在循环的每次迭代中,您实际上将所有推入数组的日期设置为此日期。要么为循环计数器使用简单数字,要么在每次更改日期之前创建新日期。