按日期将日期推送到数组中,而不是按引用

时间:2015-01-13 11:48:47

标签: javascript arrays date pass-by-value

如何将日期存储到数组按值

我怀疑日期是通过引用存储到数组中的。我遇到的问题是数组最终包含多个条目,这些条目都是相同的日期,即最后计算的工作日。

我正在创建一个将在数组中返回接下来的十个工作日的函数。 ' while'循环计算天数并将工作日存储到将返回的数组中。

        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;
        }

1 个答案:

答案 0 :(得分:1)

你在哪里:

workingdays.push([currentdate,datum,daysfromstart]);

您可能需要将Date对象的副本放入数组中,所以:

workingdays.push([new Date(+currentdate), datum, daysfromstart]);

将完成这项工作。

PS

为什么+currentdate?因为如果:

new Date(currentdate)
使用

currentdate 转换为字符串(通过 Date.toString ),然后解析回Date。实现的日期构造函数应该正确解析它的 toString 方法的默认输出,但是如果你有一个像6月23日那样的日期(即45年),它将是在大多数浏览器中解析为1945年6月23日。

边缘案例?也许,但是为了1个字符你可以轻松休息,1到99年的日期将被正确复制。 ; - )