quanto manca o quanto trascorso da una data

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
piccola funzione che calcola quanto è passato o quanto manca da una data imposto alla data attuale
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:&nbsp;&nbsp;&nbsp;";
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
 

Discussioni simili