Javascript 当循环计数器增加时“;指数地;尽管使用了++;
背景信息 我正在设置一个函数,该函数根据开始日期和结束日期创建一个日期数组 函数将接收开始和结束日期,这些日期首先被格式化为Javascript 当循环计数器增加时“;指数地;尽管使用了++;,javascript,while-loop,counter,nested-function,Javascript,While Loop,Counter,Nested Function,背景信息 我正在设置一个函数,该函数根据开始日期和结束日期创建一个日期数组 函数将接收开始和结束日期,这些日期首先被格式化为年-月-日12:00:00:00格式,然后用.getTime()格式转换为毫秒 我的脚本 我制作了以下脚本来创建数组 var $date_array = []; function calc_workdays_between_dates (a, b) { function $create_date_array ($start_date, $end_date) {
年-月-日12: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\u date\u array
函数嵌套在日期之间的$calc\u workdays\u函数中是有原因的。目前,我已经剥离了$calc\u workdays\u interval\u dates
函数的所有其他部分,以便只关注手头的问题(我还在这个精简版本上运行测试-因此函数的其余部分不会影响任何东西)
我的问题
例1:
如果我在两个日期(x1,x2)之间调用函数calc\u workdays\u代码>其中:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-07")
它会导致$date\u数组
获得以下内容:
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:
结果:
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)
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)
正如您所看到的,函数以某种方式跳过了周一、周三和周四(总共3天)
例3:
结果:
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)
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:
导致函数不工作。while循环似乎继续无休止地运行
我的问题
是什么让脚本跳过了几天?您根据$start\u date
和计数器计算下一个日期。但是,在while循环中,$start\u date
被重新分配,因此不再表示开始日期。因此,不应使用计数器
递增,而应仅使用一个计数器递增
正确的解决办法是:
while ($start_date !== $end_date) {
var x = new Date($start_date);
x.setDate(x.getDate() + 1);
$date_array.push(x);
$start_date = x.getTime();
}
嗯,您的$create_date_array
func需要一个date
对象,但您正在传递一个数组(x1=[新日期(“2015-04-04”)]
)。我遗漏了什么吗?@NikolaDimitroff:$create\u date\u array
函数接收以毫秒为单位的日期,然后在执行任何计算之前将其转换为函数本身的日期。另一个错误是日期出现在括号中。我已经删除了。哦,我的上帝-谢谢@mvdssel。到现在为止,我盯着剧本看了大约90分钟,头都疼了。我就是看不见!非常感谢你!
while ($start_date !== $end_date) {
var x = new Date($start_date);
x.setDate(x.getDate() + 1);
$date_array.push(x);
$start_date = x.getTime();
}