Foros del Web » Programando para Internet » PHP »

Funcion restar fechas y desglosarlas en a m s d h m s

Estas en el tema de Funcion restar fechas y desglosarlas en a m s d h m s en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/09/2013, 10:45
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 15 años, 2 meses
Puntos: 8
Funcion restar fechas y desglosarlas en a m s d h m s

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 original
  1. function fun_diferenciaEntreFechas($arg_fechaMenor, $arg_fechaMayor, $arg_obtener = "TODOABREVIA", $arg_redondear = true){
  2.         //Devuelve la diferencia entre 2 fechas según los parámetros ingresados. Es $arg_fechaMayor - $arg_fechaMenor
  3.         //El formato de fecha recibido es: "20-09-2013 17:49:30" o un timestamp
  4.         $var_segs = ""; //Por defecto
  5.         $var_mins = ""; //Por defecto
  6.         $var_horas = ""; //Por defecto
  7.         $var_dias = ""; //Por defecto
  8.         $var_semanas = ""; //Por defecto
  9.         $var_meses = ""; //Por defecto
  10.         $var_anyos = ""; //Por defecto
  11.         $var_fechaMenor = 0; //Por defecto
  12.         $var_fechaMayor = 0; //Por defecto
  13.         if(!is_numeric(
  14.             $arg_fechaMayor)){$var_fechaMayor = strtotime($arg_fechaMayor);
  15.         }else{$var_fechaMayor = $arg_fechaMayor;}
  16.         if(!is_numeric($arg_fechaMenor)){
  17.             $var_fechaMenor = strtotime($arg_fechaMenor);
  18.         }else{$var_fechaMenor = $arg_fechaMenor;}
  19.         $var_resultadoTotalSegs = $var_fechaMayor - $var_fechaMenor; //Resultado en segundos
  20.         $var_resultadoTotalFinal = ""; //Por defecto
  21.         switch ($arg_obtener) {
  22.             case "SEGUNDOS":{
  23.                 $var_resultadoTotalFinal = $var_resultadoTotalSegs;
  24.                 if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal);
  25.                 break;
  26.             }
  27.             case "MINUTOS":{
  28.                 $var_resultadoTotalFinal = $var_resultadoTotalSegs/60;
  29.                 if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal);
  30.                 break;
  31.             }
  32.             case "HORAS":{
  33.                 $var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60;
  34.                 if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal);
  35.                 break;
  36.             }
  37.             case "DIAS":{
  38.                 $var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60/24;
  39.                 if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal);
  40.                 break;
  41.             }
  42.             case "SEMANAS":{
  43.                 $var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60/24/7;
  44.                 if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal);
  45.                 break;
  46.             }
  47.             case "MESES":{
  48.                 $var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60/24/30;
  49.                 if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal);
  50.                 break;
  51.             }
  52.             case "ANYOS":{
  53.                 $var_resultadoTotalFinal = $var_resultadoTotalSegs/60/60/24/365;
  54.                 if($arg_redondear) $var_resultadoTotalFinal = round($var_resultadoTotalFinal);
  55.                 break;
  56.             }
  57.             case "TODOABREVIA":{
  58.                 //Averiguamos el resto de unidades a partir de los segundos...
  59.                 //DIAS
  60.                     $var_dias=intval($var_resultadoTotalSegs/(60*60*24));
  61.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_dias*60*60*24);
  62.                     if($var_dias>0){$var_resultadoTotalFinal .= $var_dias . "d ";}
  63.                 //HORAS
  64.                     $var_horas=intval($var_resultadoTotalSegs/(60*60));
  65.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_horas*60*60);
  66.                     if($var_horas>0){$var_resultadoTotalFinal .= $var_horas . "h ";}
  67.                 //MINUTOS
  68.                     $var_minutos=intval($var_resultadoTotalSegs/60);
  69.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_minutos*60);
  70.                     echo $var_resultadoTotalFinal;
  71.                     if($var_minutos>0){$var_resultadoTotalFinal .= $var_minutos . "m ";}
  72.                 //SEGUNDOS
  73.                     $var_resultadoTotalFinal .= $var_resultadoTotalSegs . "s";
  74.                 break;
  75.             }
  76.             case "TODOFULL":{
  77.                 //Averiguamos el resto de unidades a partir de los segundos...
  78.                 //ANYOS
  79.                     $var_anyos=intval($var_resultadoTotalSegs/(60*60*24*365));
  80.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_anyos*60*60*24*365);
  81.                     if($var_anyos>0){$var_resultadoTotalFinal .= $var_anyos . "a ";}
  82.                 //MESES
  83.                     $var_meses=intval($var_resultadoTotalSegs/(60*60*24*30));
  84.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_meses*60*60*24*30);
  85.                     if($var_meses>0){$var_resultadoTotalFinal .= $var_meses . "mes ";}
  86.                 //SEMANAS
  87.                     $var_semanas=intval($var_resultadoTotalSegs/(60*60*24*7));
  88.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_semanas*60*60*24*7);
  89.                     if($var_semanas>0){$var_resultadoTotalFinal .= $var_semanas . "sem ";}
  90.                 //DIAS
  91.                     $var_dias=intval($var_resultadoTotalSegs/(60*60*24));
  92.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_dias*60*60*24);
  93.                     if($var_dias>0){$var_resultadoTotalFinal .= $var_dias . "d ";}
  94.                 //HORAS
  95.                     $var_horas=intval($var_resultadoTotalSegs/(60*60));
  96.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_horas*60*60);
  97.                     if($var_horas>0){$var_resultadoTotalFinal .= $var_horas . "h ";}
  98.                 //MINUTOS
  99.                     $var_minutos=intval($var_resultadoTotalSegs/60);
  100.                     $var_resultadoTotalSegs = $var_resultadoTotalSegs - ($var_minutos*60);
  101.                     if($var_minutos>0){$var_resultadoTotalFinal .= $var_minutos . "m ";}
  102.                 //SEGUNDOS
  103.                     $var_resultadoTotalFinal .= $var_resultadoTotalSegs . "s";
  104.                 break;
  105.             }
  106.         }
  107.         return ($var_resultadoTotalFinal);
  108.     }
  #2 (permalink)  
Antiguo 20/09/2013, 10:48
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 13 años, 2 meses
Puntos: 397
Respuesta: Funcion restar fechas y desglosarlas en a m s d h m s

Hola excelente aporte, aunque seria genial si la función trabajase con la clase DateTime de PHP

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 20/09/2013, 10:50
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 15 años, 2 meses
Puntos: 8
Respuesta: Funcion restar fechas y desglosarlas en a m s d h m s

Cita:
Iniciado por jonni09lo Ver Mensaje
Hola excelente aporte, aunque seria genial si la función trabajase con la clase DateTime de PHP

Saludos
Lo tendré en cuenta para la siguiente.
No la conocia.

Gracias
  #4 (permalink)  
Antiguo 20/09/2013, 10:51
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 15 años, 2 meses
Puntos: 8
Respuesta: Funcion restar fechas y desglosarlas en a m s d h m s

Ejemplos de la llamada serian por ejemplo asi:

Código PHP:
Ver original
  1. fun_diferenciaEntreFechas(time(),"20-09-2013 17:49:30","MINUTOS");

o

Código PHP:
Ver original
  1. fun_diferenciaEntreFechas("20-09-2013 17:49:30","22-09-2013 19:22:10");

o

Código PHP:
Ver original
  1. fun_diferenciaEntreFechas("20-09-2013 17:49:30","22-09-2013 19:22:10", "TODOFULL");

Etiquetas: funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:13.