Foros del Web » Programando para Internet » PHP »

restar fechas

Estas en el tema de restar fechas en el foro de PHP en Foros del Web. hola maestros necesito restar dos fechas usando php antes lo hacia usando datediff(fecha1,fecha2) de mysql pero no se me permite por un tema de versiones. ...
  #1 (permalink)  
Antiguo 16/05/2006, 11:11
Avatar de mveraa  
Fecha de Ingreso: diciembre-2002
Ubicación: santiago-chilito
Mensajes: 1.931
Antigüedad: 21 años, 3 meses
Puntos: 2
restar fechas

hola maestros necesito restar dos fechas usando php antes lo hacia usando datediff(fecha1,fecha2) de mysql pero no se me permite por un tema de versiones.

un saludo,
__________________
"Cuando se adelanta un oponente, enfréntalo y salúdalo; si intenta retroceder, déjalo seguir su camino"
  #2 (permalink)  
Antiguo 16/05/2006, 11:27
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 18 años
Puntos: 2
Para hacer ese cálculo tendrías que tener las fechas como timestamp. No so como las estaras guardando en tu base de datos, pero con la función strtotime() podés convertir una fecha en formato textual a timestamp. Luego tendrias que realizar la resta y por último darle el formato que prefieras con date():

Código PHP:
<?
$fecha1 
"una_fecha";
$fecha2 "otra_fecha";
$resta_fecha strtotime($fecha1) - strtotime($fecha2);
echo 
date("d-m-Y"$resta_fecha); //Imprime la fecha con formato dd-mm-aaaa 
?>
  #3 (permalink)  
Antiguo 17/05/2006, 06:56
Avatar de mveraa  
Fecha de Ingreso: diciembre-2002
Ubicación: santiago-chilito
Mensajes: 1.931
Antigüedad: 21 años, 3 meses
Puntos: 2
muchas gracias por la orientacion.
__________________
"Cuando se adelanta un oponente, enfréntalo y salúdalo; si intenta retroceder, déjalo seguir su camino"
  #4 (permalink)  
Antiguo 17/05/2006, 12:18
Avatar de mveraa  
Fecha de Ingreso: diciembre-2002
Ubicación: santiago-chilito
Mensajes: 1.931
Antigüedad: 21 años, 3 meses
Puntos: 2
hola tu ejemplo me aclaro mucho el tema pero tengo una duda , necesito obtener en dias la diferencia entre dos fechas.

osea


2006-05-16 y 2006-05-17 un dia de diferencia.

$fecha1 = $fecha_pago;
$fecha2 = $ahora;
$resta_fecha = strtotime($fecha1) - strtotime($fecha2);
echo "DIFERENCIA:".date("d", $resta_fecha); // me devuelve un fecha

ojala me puedan brindar una mano , yo pormientras investigo el tema.

un saludo.
__________________
"Cuando se adelanta un oponente, enfréntalo y salúdalo; si intenta retroceder, déjalo seguir su camino"
  #5 (permalink)  
Antiguo 17/05/2006, 12:32
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 18 años
Puntos: 2
Las fechas con formato timestamp son medidas como la cantidad de segundos trancurridos desde el 1 de enero de 1970 (creo). Asi que al restar las fechas, obtenes el número de segundos transcurridos entre esas dos fechas. Lo único que tenes que hacer es dividir ese número por la cantidad de segundo que hay en un día, es decir, 86400:

Código PHP:
<?
$fecha1 
$fecha_pago
$fecha2 $ahora
$resta_fecha strtotime($fecha1) - strtotime($fecha2); 
echo 
"DIFERENCIA:".($resta_fecha/86400); // me devuelve un fecha
?>
Saludos.
  #6 (permalink)  
Antiguo 17/05/2006, 12:49
Avatar de mveraa  
Fecha de Ingreso: diciembre-2002
Ubicación: santiago-chilito
Mensajes: 1.931
Antigüedad: 21 años, 3 meses
Puntos: 2
ok , lo chequeare gracias.
__________________
"Cuando se adelanta un oponente, enfréntalo y salúdalo; si intenta retroceder, déjalo seguir su camino"
  #7 (permalink)  
Antiguo 17/05/2006, 15:31
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 19
esta es otra forma

Código PHP:
<?php
$dateFrom 
date("d-m-Y H:i:s"strtotime('now'));
$dateTo "09-06-2006 13:00:00";

$diffd getDateDifference($dateFrom$dateTo'd');
$diffh getDateDifference($dateFrom$dateTo'h');
$diffm getDateDifference($dateFrom$dateTo'm');
$diffs getDateDifference($dateFrom$dateTo's');
$diffa getDateDifference($dateFrom$dateTo'a');

echo 
'Calculando la diferencia entre ' $dateFrom ' y ' $dateTo ' <br /><br />';

echo 
$diffd ' Dias.<br />';
echo 
$diffh ' Horas.<br />';
echo 
$diffm ' Minutos.<br />';
echo 
$diffs ' Segundos.<br />';

echo 
'<br />Faltan ' $diffa['days'] . ' dias, ' $diffa['hours'] . ' horas, ' $diffa['minutes'] . ' minutos y ' $diffa['seconds'] . ' segundos para el inicio del mundial de Alemania 2006<br>';

?>


<?php

function getDateDifference($dateFrom$dateTo$unit 'd')
{
   
$difference null;

   
$dateFromElements split(' '$dateFrom);
   
$dateToElements split(' '$dateTo);

   
$dateFromDateElements split('-'$dateFromElements[0]);
   
$dateFromTimeElements split(':'$dateFromElements[1]);
   
$dateToDateElements split('-'$dateToElements[0]);
   
$dateToTimeElements split(':'$dateToElements[1]);

   
// Get unix timestamp for both dates

   
$date1 mktime($dateFromTimeElements[0], $dateFromTimeElements[1], $dateFromTimeElements[2], $dateFromDateElements[1], $dateFromDateElements[0], $dateFromDateElements[2]);
   
$date2 mktime($dateToTimeElements[0], $dateToTimeElements[1], $dateToTimeElements[2], $dateToDateElements[1], $dateToDateElements[0], $dateToDateElements[2]);

   if( 
$date1 $date2 )
   {
       return 
null;
   }

   
$diff $date2 $date1;

   
$days 0;
   
$hours 0;
   
$minutes 0;
   
$seconds 0;

   if (
$diff 86400 <= 0)  // there are 86,400 seconds in a day
   
{
       
$days $diff 86400;
   }

   if(
$diff 86400 0)
   {
       
$rest = ($diff 86400);
       
$days = ($diff $rest) / 86400;

       if( 
$rest 3600 )
       {
           
$rest1 = ($rest 3600);
           
$hours = ($rest $rest1) / 3600;

           if( 
$rest1 60 )
           {
               
$rest2 = ($rest1 60);
               
$minutes = ($rest1 $rest2) / 60;
               
$seconds $rest2;
           }
           else
           {
               
$minutes $rest1 60;
           }
       }
       else
       {
           
$hours $rest 3600;
       }
   }

   switch(
$unit)
   {
       case 
'd':
       case 
'D':

           
$partialDays 0;

           
$partialDays += ($seconds 86400);
           
$partialDays += ($minutes 1440);
           
$partialDays += ($hours 24);

           
$difference $days $partialDays;

           break;

       case 
'h':
       case 
'H':

           
$partialHours 0;

           
$partialHours += ($seconds 3600);
           
$partialHours += ($minutes 60);

           
$difference $hours + ($days 24) + $partialHours;

           break;

       case 
'm':
       case 
'M':

           
$partialMinutes 0;

           
$partialMinutes += ($seconds 60);

           
$difference $minutes + ($days 1440) + ($hours 60) + $partialMinutes;

           break;

       case 
's':
       case 
'S':

           
$difference $seconds + ($days 86400) + ($hours 3600) + ($minutes 60);

           break;

       case 
'a':
       case 
'A':

           
$difference = array (
               
"days" => $days,
               
"hours" => $hours,
               
"minutes" => $minutes,
               
"seconds" => $seconds
           
);

           break;
   }

   return 
$difference;
}
?>
Pueden verlo funcionando en aqui

saludos
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
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 17:01.