Discussione:
Calcolare giorni lavorativi comprese tra due date
(troppo vecchio per rispondere)
diego1966
2017-05-07 18:40:05 UTC
Permalink
Buona sera, avrei bisogno di una grossa mano, in un modulo PDF ho bisogno di visualizzare in un campo che chiameremo "TotGiorni" un numero ricavato dall'intervallo di due campi data, che chiameremo "Dalgg" e "Algg", come da titolo i giorni sono lavorativi e si possono sviluppare in una settimana lavorativa di 5 gg o di 6 gg (Sabato incluso), in tutto questo per calcolare i giorni di effettivo lavoro sono da considerare anche le festività compresa il santo patrono e la pasqua (o meglio la pasquetta visto che la pasqua cade sempre di domenica), per farmi restituire i giorni effettivi tra due date ho usato questo script :


//console.show();
//console.clear();


var strStart = this.getField("dalgg").value;
var strEnd = this.getField("Algg").value;
if(strStart.length && strEnd.length)
{
var dateStart = util.scand("dd/mm/yyyy",strStart);
var dateEnd = util.scand("dd/mm/yyyy",strEnd);
var diff = dateEnd.getTime() - dateStart.getTime();
var oneDay = 24 * 60 * 60 * 1000;
var days = Math.floor(diff/oneDay);
event.value = 1+days;
}
else
event.value = 0;

dove il 1+days mi ritorna 1 se il giorno lavorativo è compreso tra la stessa data (data inizio oggi, data fine oggi), viceversa se non aggiungevo quell' 1 mi restituiva 0.

potreste darmi una mano di aiuto per favore? non so come fare, sono molto scarso, come posso fare ad implementare a questo codice la funzione per determinare i festivi e la pasquetta e poter scegliere se il calcolo dei giorni fa fatto su 5 giorni lavorativi o su 6 se includiamo il sabato.
Dr J R Stockton
2017-05-08 22:30:01 UTC
Permalink
In it.comp.lang.javascript message <c23843da-6b2e-46b5-9e50-b8ff9162277b
@googlegroups.com>, Sun, 7 May 2017 11:40:05, diego1966
Post by diego1966
Buona sera, avrei bisogno di una grossa mano, in un modulo PDF ho bisogno di visualizzare in un campo che chiameremo "TotGiorni" un numero
ricavato dall'intervallo di due campi data, che chiameremo "Dalgg" e "Algg", come da titolo i giorni sono lavorativi e si possono sviluppare in
una settimana lavorativa di 5 gg o di 6 gg (Sabato incluso), in tutto questo per calcolare i giorni di effettivo lavoro sono da considerare
anche le festività compresa il santo patrono e la pasqua (o meglio la pasquetta visto che la pasqua cade sempre di domenica), per farmi
Code for the Date of Easter Sunday, derived from the British Calendar
Act, and agreeing perpetually with Clavius & Gregory XIII, can be found
in
<http://web.archive.org/web/20120805200830/http://www.merlyn.demon.co.uk
/estr-bcp.htm>.
--
(c) John Stockton, Surrey, UK. ¬@merlyn.demon.co.uk Turnpike v6.05 MIME.
Merlyn Web Site < > - FAQish topics, acronyms, & links.
Sandro kensan
2017-05-09 14:19:02 UTC
Permalink
Post by diego1966
var oneDay = 24 * 60 * 60 * 1000;
var days = Math.floor(diff/oneDay);
Tra l'altro se c'è il cambio di orario tipicamente in primavera e in
autunno forse non funziona questo sistema.
--
Sandro kensan www.kensan.it & www.qiqi.it geek site
Saluto gli agenti della NSA - Hello NSA - www.nsa.gov
Alessandro Pellizzari
2017-05-09 16:54:53 UTC
Permalink
Post by Sandro kensan
Post by diego1966
var oneDay = 24 * 60 * 60 * 1000;
var days = Math.floor(diff/oneDay);
Tra l'altro se c'è il cambio di orario tipicamente in primavera e in
autunno forse non funziona questo sistema.
E i bisestili, e i leap seconds, e le feste nazionali/regionali, e un
milione di altre cose.

Gestire date e` una delle cose piu` difficili.

Io partirei almeno dall'usare moment.js per fare i calcoli. Poi le feste
locali vanno calcolate a mano, ma almeno e` un inizio.

Bye.
Dr J R Stockton
2017-05-10 16:45:15 UTC
Permalink
Post by Sandro kensan
Post by diego1966
var oneDay = 24 * 60 * 60 * 1000;
var days = Math.floor(diff/oneDay);
Tra l'altro se c'è il cambio di orario tipicamente in primavera e in
autunno forse non funziona questo sistema.
Aggiungi mezza giornata alla data successiva; O utilizzare Math.round
invece di Math.floor.
--
(c) John Stockton, Surrey, UK. ¬@merlyn.demon.co.uk Turnpike v6.05 MIME.
Merlyn Web Site < > - FAQish topics, acronyms, & links.
diego1966
2017-05-09 22:13:34 UTC
Permalink
Ringrazio tutti per i suggerimenti , vedrò di capitalizzarli
f***@gmail.com
2017-05-11 18:44:18 UTC
Permalink
<snip>
Giorni lavorativi tra due date: problema comune.
Non è possibile farlo come vuoi te. Ci vuole una base di dati per tenere i
festivi che l'azienda per cui fai il lavoro tiene in considerazione. Ci sono
aziende che lavorano anche a pasqua e altre che fanno ponti di una settimana.
Di solito si fa con una stored procedure su un qualsiasi DBMS, ed è una
operazione abbastanza semplice (differenza(-sabati/domeniche)-tutti i giorni
compresi tra le date che l'amministratore del sistema mette come festivi).
Di solito si fa sul DB perché è una di quelle operazioni che ti servono in
una o più views in ogni caso.
In JS si richiama in AJAX qualcosa lato server che ritorna il risultato di
una query.

Ciao!

Loading...