我正在一个用户可以预订度假屋的网站上工作。 预订时间为周六至周六。如果用户单击该周中的任何日期,则必须选择整周。我有那部分工作。
我在"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)
这可能是一些小而愚蠢的东西,但我似乎无法找到它。 任何帮助表示赞赏!
答案 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)
。在循环的每次迭代中,您实际上将所有推入数组的日期设置为此日期。要么为循环计数器使用简单数字,要么在每次更改日期之前创建新日期。