ragazzi io ho delle date in un database salvate in TIME(), come posso fare la differenza tra una data in time e un altra?
ragazzi io ho delle date in un database salvate in TIME(), come posso fare la differenza tra una data in time e un altra?
il calcolo lo fa giusto, ma risulta in negativo, in questo esempio mi da -16, invece dovrebbe dare 16.Codice PHP:
function datediff($tipo, $partenza, $fine)
{
switch ($tipo)
{
case "A" : $tipo = 365;
break;
case "M" : $tipo = (365 / 12);
break;
case "S" : $tipo = (365 / 52);
break;
case "G" : $tipo = 1;
break;
}
$date_diff = $partenza - $fine;
$date_diff = floor(($date_diff / 60 / 60 / 24) / $tipo);
return $date_diff;
}
echo datediff("G", "1334087431", time());
perchè?
NO!
Ci sono gia' le fuzioni in php per fare questi conti, e non mi stancherò mai di dirvelo.
Hai la classe dateTime usala!
http://php.net/manual/en/book.datetime.php
1- recuperi la data da database
2- usi la date_create_from_format o altra funzione per costruire il tuo oggetto date
3- usa l'opportuno metodo di conteggio :
http://www.php.net/manual/en/datetime.diff.php
http://www.php.net/manual/en/datetime.add.php
http://www.php.net/manual/en/datetime.sub.php
scusami ma non ho capito, avendo il time non mi viene semplice fare la differenza?
Si ma usa le funzioni che ti ho linkato, sono migliori.
In quei links hai tutti gli strumenti per risolvere elegantemente il tuo problema
Allora tu hai fatto 1 funzione per eseguire un conteggio sulle date.
Da quello che ho visto ti aspetti di calcolare la differenza tra 2 date, unitamente al fatto che la differenza venga calcolata secondo la scala cronometrica che decidi te, in parole povere ti fai restituire la differenza in anni, mesi settimane o giorni in base al primo parametro che passi.
Nella funzione non tieni conto dei cambi di ora legale/solare, non tieni conto se l'anno e' bisestile o meno ... etc....
Io ti dico che php ti mette a disposizione una serie di funzioni che gia' fanno tali conteggi molto precisamente. Quindi usa tali funzioni. puoi Usarel anche nella tua funzione cosi' da riformattare l'output conformente al quanto il sistema di aspetta gia.
In soldoni devi modificare la tua funzione in modo che
1- $partenza e $fine siano convertite in oggetti dateTime (suppongo siano delle timestamp ma l'oggetto dateTime gestisce pure le timestamps)
2-utilizzare l'opportuno metodo di calcolo differenza messo a disposizione dall'oggetto datetime
3- analizzare il risulatato del calcolo differenza e quindi riformattarlo in base alla scala cronometrica scelta(mese,anno, etc..)
4- restituire il risultato.
Guarda sto provando ad usarla ma sbaglio sempre non so
non mi potresti fare un esempio?Codice PHP:
$date = new DateTime();
$start = $date->setTimestamp(1334570902);
$end = $date->setTimestamp(time());
$interval = $start->diff($end);
echo $interval->format('%R%a days');
Noti qualche differenza ?
Codice PHP:
$start = new DateTime();
$end = new DateTime() ;
$start->setTimestamp(1334570902);
$end->setTimestamp(time());
$interval = $start->diff($end);
echo $interval->format('%R%a days');
beh si ho visto, grazie mille. Ma quindi in questo modo lui calcola anno bisestile etc anche? mentre con una funziona come quella di sopra tutto questo non avviene.