按值而不是引用将日期推入数组
push date into array by value, not by reference
如何将日期按值存储到数组中?
我怀疑日期是通过引用存储到数组中的。我遇到的问题是 数组最终包含多个条目,这些条目都是相同的日期 ,即最后计算的工作日。
我正在制作一个函数,它将 return 数组中接下来的十个工作日。
'while' 循环计算天数并将工作日存储到将被 returned 的数组中。
var thedays = getworkingdays();
console.log(thedays);
function getworkingdays(){
var currentdate = new Date();
i = 0;
var workingdays = new Array();
while (i < 10){
//add a day
currentdate.setDate(currentdate.getDate() + 1);
i++;
//if it's a workingday add it to the array
if (!(currentdate.getUTCDay() == 0 || currentdate.getUTCDay() == 6 )){
workingdays.push(currentdate);
}
}
return workingdays;
}
你在哪里:
workingdays.push([currentdate,datum,daysfromstart]);
您可能需要将 Date 对象的副本放入数组中,因此:
workingdays.push([new Date(+currentdate), datum, daysfromstart]);
会完成任务的。
PS
为什么 +currentdate
?因为如果:
new Date(currentdate)
使用 ,currentdate 转换为字符串(通过 Date.toString),然后解析回日期。一个实现的日期构造函数应该正确解析其 toString 方法的默认输出,他们会这样做,但如果你有一个像 23 June 45(即 45 年)这样的日期,在大多数浏览器中它将被解析为 1945 年 6 月 23 日。
边缘案例?也许吧,但是为了 1 个字符,您可以高枕无忧,1 到 99 年的日期将被正确复制。 ;-)
如何将日期按值存储到数组中?
我怀疑日期是通过引用存储到数组中的。我遇到的问题是 数组最终包含多个条目,这些条目都是相同的日期 ,即最后计算的工作日。
我正在制作一个函数,它将 return 数组中接下来的十个工作日。 'while' 循环计算天数并将工作日存储到将被 returned 的数组中。
var thedays = getworkingdays();
console.log(thedays);
function getworkingdays(){
var currentdate = new Date();
i = 0;
var workingdays = new Array();
while (i < 10){
//add a day
currentdate.setDate(currentdate.getDate() + 1);
i++;
//if it's a workingday add it to the array
if (!(currentdate.getUTCDay() == 0 || currentdate.getUTCDay() == 6 )){
workingdays.push(currentdate);
}
}
return workingdays;
}
你在哪里:
workingdays.push([currentdate,datum,daysfromstart]);
您可能需要将 Date 对象的副本放入数组中,因此:
workingdays.push([new Date(+currentdate), datum, daysfromstart]);
会完成任务的。
PS
为什么 +currentdate
?因为如果:
new Date(currentdate)
使用 ,currentdate 转换为字符串(通过 Date.toString),然后解析回日期。一个实现的日期构造函数应该正确解析其 toString 方法的默认输出,他们会这样做,但如果你有一个像 23 June 45(即 45 年)这样的日期,在大多数浏览器中它将被解析为 1945 年 6 月 23 日。
边缘案例?也许吧,但是为了 1 个字符,您可以高枕无忧,1 到 99 年的日期将被正确复制。 ;-)