Newsgroup: it.comp.lang.javascript
Titolo: Calcolare giorni lavorativi comprese tra due date

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.

restituire i giorni effettivi tra due date ho usato questo script :
 
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.
 
 

   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
 

 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.
 
 

Ringrazio tutti per i suggerimenti , vedrò di capitalizzarli

autunno forse non funziona questo sistema.
 
Aggiungi mezza giornata alla data successiva; O utilizzare Math.round
invece di Math.floor.


 <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!