Informacje dodatkoweChoć licznik pętli zwiększenie „geometrycznym” pomimo stosowania ++
ja powołującą funkcję, która tworzy tablicę datę w oparciu o datę rozpoczęcia i datę zakończenia.
Funkcja otrzyma datę rozpoczęcia i zakończenia, które zostały najpierw sformatowane do formatu year-month-dayT12:00:00:00
, a następnie przekształcone na milisekundy w formacie .getTime()
.
Mój skrypt
zrobiłem następujący skrypt, aby utworzyć tablicę.
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);
}
Należy pamiętać, że nie ma powodu do zagnieżdżania funkcji $create_date_array
wewnątrz funkcji $calc_workdays_between_dates
. Na razie usunąłem wszystkie inne części funkcji $calc_workdays_between_dates
, aby skupić się wyłącznie na problemie (prowadzę również testy na tej rozebranej wersji - więc reszta funkcji nie ma wpływu na cokolwiek).
Mój problem
Przykład 1:
Gdybym wywołać funkcję z calc_workdays_between_dates (x1, x2);
gdzie:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-07")
to skutkuje $date_array
się następującą treść:
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)
Jak widać funkcja z jakiegoś powodu pomija poniedziałek (łącznie jeden dzień).
Przykład 2:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-10")
skutkuje:
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)
Jak widać funkcja jakoś pomija poniedziałek, środę i czwartek (3 dni w sumie).
Przykład 3:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-14")
skutkuje:
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)
Jak widać funkcję w THISE przykład pomija poniedziałek, środa, czwartek, sobota, niedziela i poniedziałek (6 dni razem).
Przykład 4:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-08")
wyniki w funkcji nie działa. Wygląda na to, że pętla while nadal działa bez końca.
Moje pytanie
Co robi skrypt pominąć dni?
Ehm, twój '$ create_date_array' func oczekuje' dzień spełnienia wymogu obiekt, ale są przechodzącą tablicę ('x1 = [new Date (" 2015-04- 04 ")]'). Czy czegoś brakuje? –
@NikolaDimitroff: Funkcja '$ create_date_array' odbiera daty w milisekundach, które są następnie konwertowane do daty mojej funkcji przed wykonaniem jakichkolwiek obliczeń. Kolejny błąd pojawił się w nawiasach. Usunąłem je. – rabbitco