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: 23 años, 9 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: 20 años, 6 meses
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: 23 años, 9 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: 23 años, 9 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: 20 años, 6 meses
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: 23 años, 9 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: 22 años, 10 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 > 0 )
       {
           
$rest1 = ($rest % 3600);
           
$hours = ($rest - $rest1) / 3600;

           if( 
$rest1 % 60 > 0 )
           {
               
$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 18:00.