piccola funzione che calcola quanto è passato o quanto manca da una data imposto alla data attuale
output
PHP:
<?php
function intero($v){//per essere sicuro che i valori per mktime siano degli interi
return (int)$v;
}
function intervallo($data){
//LA DATA DEVE ESSERE IN FORMATO Y m d (anno mese giorno) con o senza H i s
//indipendente dagli usuali separatori
//riduco la data ad un solo separatore
$pat=array('/ /','/\//','/:/','/\./');//separatori più comuni
$data=preg_replace($pat, '-', $data);
$d=explode("-", $data);//$d[0]=>"Y", $d[1]=>"m",$d[2]=>"d",$d[3]=>"H",$d[4]=>"i",$d[5]=>"s"
$d=array_map("intero",$d);
//qui si potrebbero mettere delle verifiche sulla correttezza della data
//soprattutto se la data proviene da un campo di input di un form es.
if(!checkdate($d[1],$d[2],$d[0])){
return " data non corretta ";
}
//potrebbero comunque mancare uno o piu dei H:i:s
//comunque li forzo
if(!isset($d[3]) || ($d[3]<0 || $d[3]>23)){$d[3]=0;}
if(!isset($d[4]) || ($d[4]<0 || $d[4]>59)){$d[4]=0;}
if(!isset($d[5]) || ($d[5]<0 || $d[5]>59)){$d[5]=0;}
//trasformo la data in timestamp
$data=mktime($d[3],$d[4],$d[5],$d[1],$d[2],$d[0]);
$data_ora=time();//data attuale in timestamp
//si potrebbe mettere la verifica se $delta è maggiore o minore di zero
//in modo da avere o "passate" o "mancano"
$quando= " da ";
$delta=$data_ora-$data;//intervallo
if($delta < 0){$quando = " tra ";}
$delta=abs($delta);
//calcolo giorni
$giorni=(int)($delta/(24*3600));
$avanzo=$delta%(24*3600);//resto in secondi
//calcolo ore
$ore=(int)($avanzo/3600);
$avanzo=$avanzo%3600;//resto in secondi
//calcolo minuti
$minuti=(int)($avanzo/60);
//se trascorso meno di un minuto dico adesso
if($giorni==o && $ore==0 && $minuti==0){
return " adesso ";
}
$passato="";
if($giorni > 0){
$passato.=" $giorni<sup>gg</sup> ";
}
if($ore > 0){
$passato.=" $ore<sup>h</sup> ";
}
if($minuti > 0){
$passato.=" $minuti<sup>m</sup> ";
}
return " $quando ".$passato;
}
//***TEST******
$data_post=array("2013-2-31 09:50:33","2013-10-16 13:50:33","2013/10-14 21:49.07","2013/10-14 21:49","2013/10-14 21","2013-10-25 09:50:33","2013/10-14");
foreach($data_post as $val){
echo "post del $val: ";
echo "post pubblicato".intervallo($val)."<br />";
}
?>
output
post del 2013-2-31 09:50:33: post pubblicato data non corretta
post del 2013-10-16 13:50:33: post pubblicato da 2gg 15m
post del 2013/10-14 21:49.07: post pubblicato da 3gg 16h 16m
post del 2013/10-14 21:49: post pubblicato da 3gg 16h 16m
post del 2013/10-14 21: post pubblicato da 3gg 17h 5m
post del 2013-10-25 09:50:33: post pubblicato tra 6gg 19h 44m
post del 2013/10-14: post pubblicato da 4gg 14h 5m