Informazioni diMentre contatore di ciclo aumentando "in modo esponenziale" nonostante utilizzando ++
Sto installando una funzione che crea una matrice data sulla base di una data di inizio e una data di fine.
La funzione riceverà le date di inizio e di fine, che sono state formattate per la prima volta nel formato year-month-dayT12:00:00:00
e quindi convertite in millisecondi con il formato .getTime()
.
Il mio script
ho fatto il seguente script per creare l'array.
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);
}
Si prega di essere consapevole del fatto che c'è una ragione per la nidificazione della funzione $create_date_array
all'interno della funzione $calc_workdays_between_dates
. Per ora ho eliminato tutte le altre parti della funzione $calc_workdays_between_dates
per concentrarmi esclusivamente sul problema in questione (sto anche eseguendo i miei test su questa versione ridotta - quindi il resto della funzione non è lì per influenzare nulla).
Il mio problema
Esempio 1:
Se invoco la funzione con calc_workdays_between_dates (x1, x2);
dove:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-07")
si traduce in $date_array
ottenere il seguente contenuto:
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)
Come si può vedere la funzione per qualche motivo salta lunedì (un giorno in totale).
Esempio 2:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-10")
risultati in:
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)
Come si può vedere la funzione salta qualche modo Lunedi, Mercoledì e Giovedi (3 giorni in totale).
Esempio 3:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-14")
risultati in:
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)
Come si può vedere la funzione a Thise esempio salta Lunedi, Mercoledì, Giovedi, Sabato, Domenica e Lunedi (6 giorni in totale).
Esempio 4:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-08")
risultati in funzione non funzionante. Sembra che il ciclo while continui a girare all'infinito.
La mia domanda
cosa sta facendo lo script saltare giorni?
Ehm, il vostro 'func $ create_date_array' si aspetta un' date' oggetto, ma si sta passando un array ('x1 = [new Date (" 2015-04- 04")] '). Mi sto perdendo qualcosa? –
@NikolaDimitroff: la funzione '$ create_date_array' riceve le date in millisecondi che vengono poi convertite in una data mia funzione prima di eseguire qualsiasi calcolo. Era un altro errore che le date appaiono tra parentesi. Li ho cancellati – rabbitco