gpt4 book ai didi

javascript - 尽管使用++,但循环计数器增加 "exponentially"

转载 作者:数据小太阳 更新时间:2023-10-29 05:15:18 24 4
gpt4 key购买 nike

背景信息

我正在设置一个函数,它根据开始日期和结束日期创建一个日期数组。

该函数将接收开始和结束日期,这些日期首先被格式化为 year-month-dayT12:00:00:00 格式,然后使用 .getTime() 转换为毫秒 格式。

我的脚本

我编写了以下脚本来创建数组。

var $date_array = [];

function calc_workdays_between_dates (a, b) {

function $create_date_array ($start_date, $end_date) {

var $counter = 0;

while ($start_date !== $end_date) {

var x = new Date($start_date);

x.setDate(x.getDate() + $counter);
$date_array.push(x);
$start_date = x.getTime();
$counter++;
}
}

$create_date_array (a, b);
}

请注意,将 $create_date_array 函数嵌套在 $calc_workdays_between_dates 函数中是有原因的。现在我已经删除了 $calc_workdays_between_dates 函数的所有其他部分,只关注手头的问题(我也在这个精简版本上运行我的测试 - 所以函数的其余部分不是那里会影响任何事情)。

我的问题

示例 1:

如果我使用 calc_workdays_between_dates (x1, x2); 调用该函数,其中:

x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-07")

它导致 $date_array 获得以下内容:

Sat Apr 04 2015 12:00:00 GMT+0200 (CEST)
Sun Apr 05 2015 12:00:00 GMT+0200 (CEST)
Tue Apr 07 2015 12:00:00 GMT+0200 (CEST)

如您所见,该函数出于某种原因跳过星期一(总共一天)。

示例 2:

x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-10")

结果:

Sat Apr 04 2015 12:00:00 GMT+0200 (CEST)
Sun Apr 05 2015 12:00:00 GMT+0200 (CEST)
Tue Apr 07 2015 12:00:00 GMT+0200 (CEST)
Fri Apr 10 2015 12:00:00 GMT+0200 (CEST)

如您所见,该函数以某种方式跳过了星期一、星期三和星期四(总共 3 天)。

示例 3:

x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-14")

结果:

Sat Apr 04 2015 12:00:00 GMT+0200 (CEST)
Sun Apr 05 2015 12:00:00 GMT+0200 (CEST)
Tue Apr 07 2015 12:00:00 GMT+0200 (CEST)
Fri Apr 10 2015 12:00:00 GMT+0200 (CEST)
Tue Apr 14 2015 12:00:00 GMT+0200 (CEST)

如您所见,此实例中的函数会跳过星期一、星期三、星期四、星期六、星期日和星期一(总共 6 天)。

示例 4:

x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-08")

导致函数不工作。似乎 while 循环继续无休止地运行。

我的问题

是什么让脚本跳过几天?

最佳答案

您根据 $start_datecounter 计算下一个日期。但是,在 while 循环中,$start_date 被重新分配,因此不再代表开始日期。因此它不应该随着 counter 增加,而只能增加一个。

正确的解决方案是:

while ($start_date !== $end_date) {
var x = new Date($start_date);
x.setDate(x.getDate() + 1);
$date_array.push(x);
$start_date = x.getTime();
}

关于javascript - 尽管使用++,但循环计数器增加 "exponentially",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30372415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com