Pues eso, os paso esta funcion que he hecho para restar fechas y desglosarlas en años meses semanas dias horas minutos segundos.
Puede devolver cualquiera de esos valores por separado o todos juntos...
Código PHP:
Ver originalfunction fun_diferenciaEntreFechas($arg_fechaMenor, $arg_fechaMayor, $arg_obtener = "TODOABREVIA", $arg_redondear = true){
//Devuelve la diferencia entre 2 fechas según los parámetros ingresados. Es $arg_fechaMayor - $arg_fechaMenor
//El formato de fecha recibido es: "20-09-2013 17:49:30" o un timestamp
$var_segs = ""; //Por defecto
$var_mins = ""; //Por defecto
$var_horas = ""; //Por defecto
$var_dias = ""; //Por defecto
$var_semanas = ""; //Por defecto
$var_meses = ""; //Por defecto
$var_anyos = ""; //Por defecto
$var_fechaMenor = 0; //Por defecto
$var_fechaMayor = 0; //Por defecto
$arg_fechaMayor)){$var_fechaMayor = strtotime($arg_fechaMayor); }else{$var_fechaMayor = $arg_fechaMayor;}
$var_fechaMenor = strtotime($arg_fechaMenor); }else{$var_fechaMenor = $arg_fechaMenor;}
$var_resultadoTotalSegs = $var_fechaMayor - $var_fechaMenor; //Resultado en segundos
$var_resultadoTotalFinal = ""; //Por defecto
switch ($arg_obtener) {
case "SEGUNDOS":{
$var_resultadoTotalFinal = $var_resultadoTotalSegs;
if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal); break;
}
case "MINUTOS":{
$var_resultadoTotalFinal = $var_resultadoTotalSegs/60;
if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal); break;
}
case "HORAS":{
$var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60;
if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal); break;
}
case "DIAS":{
$var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60/24;
if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal); break;
}
case "SEMANAS":{
$var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60/24/7;
if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal); break;
}
case "MESES":{
$var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60/24/30;
if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal); break;
}
case "ANYOS":{
$var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60/24/365;
if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal); break;
}
case "TODOABREVIA":{
//Averiguamos el resto de unidades a partir de los segundos...
//DIAS
$var_dias=intval($var_resultadoTotalSegs/(60*60*24)); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_dias*60*60*24);
if($var_dias>0){$var_resultadoTotalFinal .= $var_dias . "d ";}
//HORAS
$var_horas=intval($var_resultadoTotalSegs/(60*60)); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_horas*60*60);
if($var_horas>0){$var_resultadoTotalFinal .= $var_horas . "h ";}
//MINUTOS
$var_minutos=intval($var_resultadoTotalSegs/60); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_minutos*60);
echo $var_resultadoTotalFinal;
if($var_minutos>0){$var_resultadoTotalFinal .= $var_minutos . "m ";}
//SEGUNDOS
$var_resultadoTotalFinal .= $var_resultadoTotalSegs . "s";
break;
}
case "TODOFULL":{
//Averiguamos el resto de unidades a partir de los segundos...
//ANYOS
$var_anyos=intval($var_resultadoTotalSegs/(60*60*24*365)); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_anyos*60*60*24*365);
if($var_anyos>0){$var_resultadoTotalFinal .= $var_anyos . "a ";}
//MESES
$var_meses=intval($var_resultadoTotalSegs/(60*60*24*30)); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_meses*60*60*24*30);
if($var_meses>0){$var_resultadoTotalFinal .= $var_meses . "mes ";}
//SEMANAS
$var_semanas=intval($var_resultadoTotalSegs/(60*60*24*7)); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_semanas*60*60*24*7);
if($var_semanas>0){$var_resultadoTotalFinal .= $var_semanas . "sem ";}
//DIAS
$var_dias=intval($var_resultadoTotalSegs/(60*60*24)); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_dias*60*60*24);
if($var_dias>0){$var_resultadoTotalFinal .= $var_dias . "d ";}
//HORAS
$var_horas=intval($var_resultadoTotalSegs/(60*60)); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_horas*60*60);
if($var_horas>0){$var_resultadoTotalFinal .= $var_horas . "h ";}
//MINUTOS
$var_minutos=intval($var_resultadoTotalSegs/60); $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_minutos*60);
if($var_minutos>0){$var_resultadoTotalFinal .= $var_minutos . "m ";}
//SEGUNDOS
$var_resultadoTotalFinal .= $var_resultadoTotalSegs . "s";
break;
}
}
return ($var_resultadoTotalFinal);
}