Newsgroup: it.comp.www.php
Titolo: calcolo n.giorni lavorativi

Vorrei calcolare il numero di giorni lavorativi fra due date.
Cioe' non la sola differenza dei 2 timestamp delle date /86400
ma tolti anche i sabati e le domeniche ed eventualmente
le festivita'.
Falco


Una soluzione al volo potrebbe essere quella di effettuare un ciclo tra la
data iniziale e quella finale e per ciascun giorno verificare se è sabato o
domenica.
Non saprei però come testare le festività, a meno di non memorizzare i
giorni festivi in un db e poi fare dei confronti.
Ciao
Marco

Vuoi una specie di calendario,
bene io ho una funzione che calcola precisamente i giorni festivi
compresi i giorni lavorativi dove si lavora solo mezza giornata,
considerando anche la pasqua
come parametri accetta una data,
 echo  festivita( '2004-05-31');
come output restituisce "Pentecoste" oppure "0"
procedi facendo uno script che cicla le date che decidi te
per ogni data che viene ciclata
fai un check per i sabati e domenica e
uno con la funzione festivita che ti posso mandare io,  poi sommi
tutti i true e ottieni proprio cio' che cerchi ;-)
penso di essere stato abbastanza chiaro
ciao...
Jeey

Falco wrote:

Prova a dare una occhiata qui:
http://www.mozilla.org/projects/calendar/holidays.html
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1
Inviare email con allegati? 
http://url.repository.biz/go/1Z
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

 ha scritto nel messaggio
news:c1pq1m$1fjhkh$1...@ID-195894.news.uni-berlin.de...

Ma a parte la tua classe come testo i sabati e le domeniche ?
Falco

 Ma a parte la tua classe come testo i sabati e le domeniche ?
Leggendo il manuale?
http://www.php.net/date



Se ti può essere utile ti passo una routine che trovi su
 
http://www.sitocomune.com/general/general028.htm
è scritta per M$ access ma è abbastanza facile da capire e
convertire. Il mio solo contributo fu, diversi anni fa,
per la data della Pasqua, il resto ammetto di non averlo
neppure guardato...
gpb
Conteggio dei giorni lavorativi tra due date.
   G. Paolo Bizzaro, Silvio Mazzetto, Roberto
Public Function ContaLavorativi(DataIniziale As Date, DataFinale _
             As Date, Settimanacorta As Boolean) As Integer
    'Autore: Silvio Mazzetto
    'Accetta:
    ' DataIniziale = data iniziale del periodo scelto
    ' DataFinale = data finale del periodo scelto
    ' Settimanacorta = True se bisogna considerare la settimana corta
    'Restituisce: numero di giorni lavorativi del periodo
    'La funzione utilizza Festivo() e Pasqua() usabili anche separatamente
    Dim DataDaContare As Date, Conto As Integer
    If Not IsDate(DataIniziale) Or Not IsDate(DataFinale) Or 
DataIniziale > _
       DataFinale Then
       ContaLavorativi = 0
       Exit Function
    End If
    DataDaContare = DataIniziale - 1
    If Settimanacorta Then
       Do
          DataDaContare = DataDaContare + 1
          If Not Festivo(DataDaContare) And WeekDay(DataDaContare) <> 7 Then
             Conto = Conto + 1
          End IF
       Loop Until DataDaContare = DataFinale
    Else
       Do
          DataDaContare = DataDaContare + 1
          If Not Festivo(DataDaContare) Then Conto = Conto + 1
          Loop Until DataDaContare = DataFinale
    End If
    ContaLavorativi = Conto
End Function
Public Function Festivo(D As Date) As Boolean
    'Autore: Silvio Mazzetto
    'Accetta: una data
    'Restituisce: True se è un giorno festivo
    'Eventualmente inserire anche il Santo Patrono della città
    'Modificato da Roberto
    Dim Anno As Integer, DayMax As Date, DayMin As Date
    Anno = Year(D)
    If WeekDay(D) = 1 Then
       Festivo = True
       Exit Function
    End If
    If Day(D) = 1 And (Month(D) = 1 Or Month(D) = 5 Or Month(D) = 11) Or _
          Day(D) = 6 And Month(D) = 1 Or Day(D) = 25 And (Month(D) = 4 Or _
          Month(D) = 12) Or Day(D) = 15 And Month(D) = 8 Or (Day(D) = 8 
Or _
          Day(D) = 26) And Month(D) = 12 Then
       Festivo = True
       Exit Function
    End If
    'intervallo in cui può cadere il Lunedì di Pasqua
    DayMax = DateValue("21/4/" & Anno)
    DayMin = DateValue("20/3/" & Anno)
    If WeekDay(D) = 2 And D <= DayMax And D >= DayMin Then
       If D = (Pasqua(Anno) + 1) Then
          Festivo = True
          Exit Function
       End If
    End If
    Festivo = False
End Function
Public Function Pasqua(Anno As Integer) As Date
    'Autore: G.Paolo Bizzaro
    'Accetta: anno (4 cifre)
    'Restituisce: giorno di Pasqua dell'anno scelto
    'Il metodo è valido per tutti gli anni nel Calendario Gregoriano,
    'ossia dal 1583 in poi
    Dim a%, b%, c%, p%, q%, r%
    a = anno% Mod 19: b = anno% \ 100: c = anno% Mod 100
    p = (19 * a + b - (b \ 4) - ((b - ((b + 8) \ 25) + 1) \ 3) + 15) Mod 30
    q = (32 + 2 * ((b Mod 4) + (c \ 4)) - p - (c Mod 4)) Mod 7
    r = (p + q - 7 * ((a + 11 * p + 22 * q) \ 451) + 114)
    Pasqua = DateSerial(anno%, r \ 31, (r Mod 31) + 1)
End Function
-- 
gpb chiocciola freemail punto it


E' il minimo altrimenti come fai con il resto :-)


Ok manuale letto e routine per sabati e domeniche fatto.
Ed ora mi manca la routine di jeey , se e' pubblica postala.
Falco


Se  il tuo indirizzo e-mail č giusto lo trovi in posta
Ciao....