Come calcolare la differenza dei giorni lavorativi senza una tabella di ricerca

1

Come posso calcolare il numero di giorni lavorativi (M-F, agnostico delle festività) tra due date senza una tabella di ricerca?

Ci deve essere una sorta di algoritmo basato sul numero di tutti i giorni e la data di inizio, giusto?

Un altro modo di esprimerlo: Se ho un numero X, come posso dire quante volte i multipli di 6 + 7Y o 7 + 7Y si verificano nell'intervallo tra 0 & X , dove Y = integers between 0 and X/7 . Deve esserci un modo usando la divisione modulo o floor, corretto?

f (17) = 4 (conteggio di 6,7,13,14)

    
posta Liam Foley 17.05.2016 - 22:19
fonte

2 risposte

1

Una delle cose più complicate è questa '2016-05-06' era 4 giorni lavorativi dopo '2016-05-02' , ma '2016-05-10' era 2 giorni lavorativi dopo '2016-05-06' , anche se in entrambe le coppie di date corrisponde esattamente lo stesso numero totale di giorni trascorsi. Quindi, quello che probabilmente farei per ottenere il numero di giorni lavorativi tra la data A e data B (supponendo che "giorno lavorativo" significhi "qualsiasi giorno che non sia un" Sabato o domenica") sarebbe di scegliere una "data zero", qualche domenica prima di qualsiasi data Vorrei sempre utilizzare come data A, trovare il numero di giorni lavorativi tra la data zero e la data B, quindi sottrarre il numero di giorni lavorativi tra la data zero e la data A.

(Naturalmente questo è tutto per una certa definizione di "tra". Per altre definizioni potrei usare un lunedì come data zero, oppure usa il lunedì con la data A e la domenica con la data B, o viceversa, qualunque cosa abbia dato risultati che corrispondono alla definizione desiderata.)

Un modo per trovare il numero di giorni lavorativi tra una domenica a zero date e la data X devono prendere il numero totale di giorni tra quelle date e sottrarre il numero di sabato e domenica.

Per questo potremmo usare quello che molti chiamano "divisione intera". Diversi linguaggi di programmazione ti offrono diversi modi per indicare che vuoi dividere un intero x con un altro intero y mentre scartando il resto. Scriverò questa operazione x // y ai fini di questa risposta; sostituire la forma corretta in qualsiasi modo lingua che usi.

Lascia che il valore intero x sia il numero totale di giorni tra il data zero (una domenica) e data X. Quindi il numero di domeniche tra la data zero e la data X è x // 7 , e il numero di sabato è (x + 1) // 7 . Il numero di giorni lavorativi è

f(x) = x - (x // 7) - ((x + 1) // 7)

Si noti che la divisione integer non segue le stesse leggi distributive come la divisione in virgola mobile (quasi); x - ((2*x + 1) // 7) produrrebbe molte risposte sbagliate.

Il numero di giorni lavorativi tra la data A e la data B, che sono rispettivamente a days e b giorni dopo la data zero, è quindi

f(b) - f(a)

Se devi utilizzare lunedì come data zero, allora il numero di giorni lavorativi prima della data X, che è x giorni dopo la data zero, è f(x) - 1 .

    
risposta data 18.05.2016 - 04:55
fonte
0

Calcola giorno della settimana per ogni data.

La maggior parte delle lingue ti offre una funzione per trovare la differenza in giorni tra le due date (anche Python ).

Con quelli puoi determinare il numero di settimane e sottrarre il numero di fine settimana.

Ad esempio, potremmo calcolare il numero di settimane tra il sabato successivo alla prima data e il sabato successivo alla seconda data iniziando con la differenza in giorni e dividendo per 7 per ottenere settimane.

    
risposta data 17.05.2016 - 22:38
fonte

Leggi altre domande sui tag