Quando si programma bisogna ragionare semplice. Piu' ci si contorce e piu' ci si annoda. Nel caso di questo thread la richiesta era calcolare in giorni ... il delta in giorni tra due date.Originariamente inviato da Marburg
x piero.mac:
potresti spiegarci come fare? Mi è chiaro l'utilizzo di mysql. Però da php non ho trovato altri sistemi se non quello di analizzarmi le varie casistiche...
Ciao!
1) Prima risposta una query elementare...
codice:select to_days('2006-03-09') - to_days('2006-02-10') as diff oppure SELECT DATEDIFF('2006-03-09', '2006-02-10') AS diff
2) Tu la vorresti vedere in php svincolata dal unix timestamp.... allora si calcola senza unix timestamp.... mi pare che possa avere valenza solo come esercizio didattico e nulla piu' perche' di solito una delle due date e' messa in una tabella del db.
anyway.... ti propongo la seguente:
E' cosi' semplice questa funzione che si commenta da sola. L'uso di mktime non e' legato a UNIX TIMESTAMP difatti l'anno potrebbe essere uno qualunque nel range ammesso ma non bisestile.codice:<?php $data_maggiore = '2005/03/01'; $data_minore = '1950/01/01'; function contaGiorni($data_maggiore, $data_minore) { $a = explode('/', $data_maggiore); $da = explode('/', $data_minore); $bisesto = 0; $n_anni = ($a[0] - $da[0]); for($i = $da[0]; $i <= $a[0]; $i++) { if ($i % 4 == 0) $bisesto++; } if($da[1] > 2 AND $da[0] % 4 == 0) $bisesto--; if($a[1] < 2 AND $a[0] % 4 == 0) $bisesto--; $n_giorni = $n_anni * 365 + $bisesto; $giorni_da = date('z', mktime(0,0,0, $da[1], $da[2], 1970)); $giorni_a = date('z', mktime(0,0,0, $a[1], $a[2], 1970)); return $tot = $n_giorni - $giorni_da + $giorni_a; } print contaGiorni($data_maggiore, $data_minore); ?>
potrebbe esserci qualche errore in particolari date di anni bisestili... forse.... non l'ho provata se non in modo molto massimale. Uso mysql di solito per le date.
![]()

Rispondi quotando