Comunidad de diseño web y desarrollo en internet online

Calcular tiempo transcurrido solo en meses entre dos fechas

Citar            
MensajeEscrito el 25 Jun 2010 02:00 am
Que tal, bueno e intentado calcular el tiempo transcurrido entre dos fechas pero solo lo necesito en meses, la verdad e intentado varias formas por ejemplo, hago la resta entre las dos fechas, el resultado son los dias transcurridos y solo lo divido entre los meses , pero si por ejemplo resto el 31 de enero del 2010 con el 1 de marzo del 2010 me resultan 3 meses cuando en realidad enero ya iba de salida, que ideas podrian darme para resolver este problema?... necesito algo asi como 2.1 meses o algo asi... gracias por cualquier ayuda o comentario...

Por logoys

Claber

104 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Jun 2010 05:17 am

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 30 Sep 2010 05:55 pm
espero te funcione esto

Código PHP :


<?php
function meses($fech_ini,$fech_fin) {
   /*
   FELIPE DE JESUS SANTOS SALAZAR, [email protected]
   SEP-2010

   ESTA FUNCION NOS REGRESA LA CANTIDAD DE MESES ENTRE 2 FECHAS

   EL FORMATO DE LAS VARIABLES DE ENTRADA $fech_ini Y $fech_fin ES YYYY-MM-DD

   $fech_ini TIENE QUE SER MENOR QUE $fech_fin

   ESTA FUNCION TAMBIEN SE PUEDE HACER CON LA FUNCION date

   SI ENCUENTRAS ALGUN ERROR FAVOR DE HACERMELO SABER

   ESPERO TE SEA DE UTILIDAD, POR FAVOR NO QUIERES ESTE COMENTARIO, GRACIAS

   */



   //SEPARO LOS VALORES DEL ANIO, MES Y DIA PARA LA FECHA INICIAL EN DIFERENTES
   //VARIABLES PARASU MEJOR MANEJO

   $fIni_yr=substr($fech_ini,0,4);
    $fIni_mon=substr($fech_ini,5,2);
    $fIni_day=substr($fech_ini,8,2);

   //SEPARO LOS VALORES DEL ANIO, MES Y DIA PARA LA FECHA FINAL EN DIFERENTES
   //VARIABLES PARASU MEJOR MANEJO
   $fFin_yr=substr($fech_fin,0,4);
    $fFin_mon=substr($fech_fin,5,2);
    $fFin_day=substr($fech_fin,8,2);

   $yr_dif=$fFin_yr - $fIni_yr;
   echo "la diferencia de años es -> ".$yr_dif."<br>";
   //LA FUNCION strtotime NOS PERMITE COMPARAR CORRECTAMENTE LAS FECHAS
   //TAMBIEN ES UTIL CON LA FUNCION date
   if(strtotime($fech_ini) > strtotime($fech_fin)){
      echo 'ERROR -> la fecha inicial es mayor a la fecha final <br>';
      exit();
   }
   else{
       if($yr_dif == 1){
         $fIni_mon = 12 - $fIni_mon;
         $meses = $fFin_mon + $fIni_mon;
         return $meses;
         //LA FUNCION utf8_encode NOS SIRVE PARA PODER MOSTRAR ACENTOS Y
         //CARACTERES RAROS
         //echo utf8_encode("la diferencia de meses con un año de diferencia es -> ".$meses."<br>");
      }
      else{
          if($yr_dif == 0){
             $meses=$fFin_mon - $fIni_mon;
            return $meses;
            //echo utf8_encode("la diferencia de meses con cero años de diferencia es -> ".$meses.", donde el mes inicial es ".$fIni_mon.", el mes final es ".$fFin_mon."<br>");
         }
         else{
             if($yr_dif > 1){
               $fIni_mon = 12 - $fIni_mon;
               $meses = $fFin_mon + $fIni_mon + (($yr_dif - 1) * 12);
               return $meses;
               //echo utf8_encode("la diferencia de meses con mas de un año de diferencia es -> ".$meses."<br>");
            }
            else
               echo "ERROR -> la fecha inicial es mayor a la fecha final <br>";
               exit();
         }
      }
   }

}
?>

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 25 Sep 2011 09:45 am
CARAY ES SIMPATICO COMO PUEDEN DAR TANTAS RESPUESTAS POR TODO EL INTERNET EN LA QUE EN VES DE AYUDAR SOLO ENREDAN A LOS USUARIOS QUE BUSCAN SABER LA DIFERENCIA DE MESES QUE HAY ENTRE UNA FECHA ANTERIOR Y LA FECHA ACTUAL.

PUES BIEN LES DIRE QUE HE CREADO UNA FUNSION PARA HACER ESTO SIN TANTO MENJURGE ASI QUE AQUI LES PONGO LA FUNCION

<?php
function numero_de_meses($hoy,$fecha_anterior)
{
$meses=0;
while($fecha_anterior<=$hoy)
{
$meses++;
$fecha_anterior=date("Y-m-d", strtotime("$fecha_anterior +1 month"));

}

return $meses;
}
?>

pues bien copien y peguen esta funcion y ya solo les quedaria llamar a la funcion de la sig manera


$Num_Meses=numero_de_meses($hoy,$fecha_anterior);

y ya en la variabla $Num_Meses tendran el numero de meses que han pasado de la fecha anterior a la fecha actual.
esta situacion implica que contara los mese cuando la fecha anterior sea menor o igual a fecha actual.


mas facil imposible.

Por cctvacapulco

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Sep 2011 12:09 pm
cctvacapulco:
Tu función devuelve resultados erróneos:
[php]
echo numero_de_meses("2011-09-26","2011-09-01"); // Devuelve 1, debería ser 0
echo numero_de_meses("2011-09-26","2011-08-30"); // Devuelve 1, debería ser 0
echo numero_de_meses("2011-09-26","2011-08-01"); // Devuelve 2, debería ser 1
[/pph]

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 24 Abr 2013 01:46 am
Yo encontre una forma sencilla, no c si te sirva todavia ahí te va!
//fechas a calcular
$fecha1 = new DateTime("2010-07-28 01:15:52");
$fecha2 = new DateTime("2012-11-30 02:33:45");
//calcular con diff
$fecha = $fecha1->diff($fecha2);
//aqui ya puedes imprimir años meses y dias etc

printf('%d años, %d meses, %d días, %d horas, %d minutos', $fecha->y, $fecha->m, $fecha->d, $fecha->h, $fecha->i);

// imprime: 2 años, 4 meses, 2 días, 1 horas, 17 minutos
// si quieres calcular algo mas ya solo es multiplicar

$fechay = $fecha->y;
$fecham = $fecha->m;
$fechad = $fecha->d;
$fechah = $fecha->h;
$fechai = $fecha->i;

$fechameses = $fechay*12 + $fecham;
echo "<br>";
echo "<br>";
echo "total en meses: ".$fechameses;


Ojala t funcione, a mi me corre de maravilla...

Por callemac

0 de clabLevel



 

chrome
Citar            
MensajeEscrito el 24 Abr 2013 01:58 am
Amigo gracias por la respuesta, pero este post es del 2011 o_O...

Por logoys

Claber

104 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.