Справочной информацииХотя счетчик цикла увеличивается «экспоненциально» несмотря на использование ++
Я настраиваю функцию, которая создает массив даты, основанный на дату начала и дату окончания.
Функция получит даты начала и окончания, которые сначала были отформатированы до 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)
Как вы можете видеть эту функцию в Thise случае скачет понедельник, среда, четверг, суббота, воскресенье и понедельник (6 дней в итоге).
Пример 4:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-08")
результаты в функции не работает. Похоже, цикл while продолжает работать бесконечно.
Мой вопрос
Что делает сценарий пропускать дни?
Ehm, ваш '$ create_date_array' FUNC ожидает' date' объект, но вы передаете массив ('x1 = [новый Date (" 2015-04- 04")] '). Я что-то упускаю? –
@NikolaDimitroff: функция '$ create_date_array' получает даты в миллисекундах, которые затем преобразуются в дату моей самой функции перед выполнением любых вычислений. Еще одна ошибка заключалась в том, что даты указаны в скобках. Я удалил их. – rabbitco