Foros del Web » Programando para Internet » PHP »

Formato al restar 2 fechas

Estas en el tema de Formato al restar 2 fechas en el foro de PHP en Foros del Web. Hola a todos, Tengo el siguiente problema, he buscado y he encontrado restas de fechas devolviendo como resultado los días entre ambas, pero lo que ...
  #1 (permalink)  
Antiguo 22/03/2010, 13:19
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 7 meses
Puntos: 0
Formato al restar 2 fechas

Hola a todos,

Tengo el siguiente problema, he buscado y he encontrado restas de fechas devolviendo como resultado los días entre ambas, pero lo que realmente deseo es que me lo devuelva en el siguiente formato, por ejemplo 3 meses y 2 días en vez de 62 días.

Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 22/03/2010, 13:29
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Formato al restar 2 fechas

como pista ya que no veo codigo te puedo dar

strtotime() <-- combiertes a segundos timeunix
strftime() <-- para formatear tus fechas
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 22/03/2010, 14:07
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Formato al restar 2 fechas

Guuaaaaoo!!!! que rapido, buenno este es el codigo que tengo

<?php
// Fecha en formato dd/mm/yyyy o dd-mm-yyyy retorna la diferencia en dias

$fecha_articulo = $_POST['fecha_inicial'];
$fecha_f = $_POST['fecha_final'];
function restaFechas($dFecIni, $dFecFin)
{
$dFecIni = str_replace("-","",$dFecIni);
$dFecIni = str_replace("/","",$dFecIni);
$dFecFin = str_replace("-","",$dFecFin);
$dFecFin = str_replace("/","",$dFecFin);

ereg( "([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})", $dFecIni, $aFecIni);
ereg( "([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})", $dFecFin, $aFecFin);

$date1 = mktime(0,0,0,$aFecIni[2], $aFecIni[1], $aFecIni[3]);
$date2 = mktime(0,0,0,$aFecFin[2], $aFecFin[1], $aFecFin[3]);

return round(($date2 - $date1) / (60 * 60 * 24));
}


// Ej.: con fechas fijas
$resultado_resta = restaFechas($fecha_articulo , $fecha_f);
echo "Tiempo del tramite: ".$resultado_resta." dias.";//--------> Aca en ves de dias lo quiero en formato meses + dias


// Podemos reemplazar la fecha inicial fija, por las que tengamos en el registro del Artículo de la base de datos
// Ej.: $resultado_resta = restaFechas( $fecha_articulo , date('d-m-Y') );
?>
<?php
$con = mysql_connect("localhost","xxxx","xxxx");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("visas", $con);

$sql="INSERT INTO usuario (fecha_inicial, fecha_final, total_dias)
VALUES
('$_POST[fecha_inicial]','$_POST[fecha_final]',$resultado_resta)";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Registro anadido";

mysql_close($con)
?>
  #4 (permalink)  
Antiguo 22/03/2010, 14:25
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Formato al restar 2 fechas

Código PHP:
Ver original
  1. <?php
  2. function restaFechas($dFecIni, $dFecFin){
  3.     $meses = floor((strtotime($dFecFin)-strtotime($dFecIni)) / 60 / 60 / 24 / 30);
  4.     $dias = (round((strtotime($dFecFin)-strtotime($dFecIni)) / 60 / 60 / 24)) - $meses * 30;
  5.     return "meses: ".$meses." dias: ".$dias;
  6. }
  7. echo restaFechas("21-01-2010", "01-03-2010");
  8. ?>

rehice un poco la funcion
en realidad fue un tanto rapido.. ve si te sirve
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 22/03/2010, 15:43
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Formato al restar 2 fechas

aqui posteo uno mejor con el algoritmo mejorado y todo con mas tiempo.. el otro fue muy a la rapida

saludos


Código PHP:
Ver original
  1. <?php
  2. function restaFechas($dFecIni, $dFecFin){
  3.     $resta = (strtotime($dFecFin)-strtotime($dFecIni)) / 60 / 60 / 24;
  4.     return array("meses"=>floor($resta/30), "dias"=>round($resta) - $meses * 30);
  5. }
  6. $fecha = restaFechas("22-02-2010", "22-03-2010");
  7. echo "Quedan ".$fecha["meses"]." meses, y ".$fecha["dias"]." dias";
  8. ?>
__________________
More about me...
~ @rhyudek1
~ Github

Etiquetas: fechas, formato, restar
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




La zona horaria es GMT -6. Ahora son las 22:35.