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!
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.
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:
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);
?>
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.
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.