Comparar fechas en PHP

Alexis Herrera
13 de Enero del 2005
Cual seria la manera correcta de comparar 2 fecha en php teniendo en cuenta que en mi base de datos las tengo en el formato 2004-12-17?

<?php
$fecha1="2004-12-17";
$fecha2="2004-12-15";
if($fecha1>$fecha2){
echo "si lo es";
}else{
echo "no lo es";
}

Eso tan sencillo en php no me sale, ya lei en algun lugar que algo hay que covetir en timestamp ..lo hice y tampoco me funiona, hechenme una mano por favor.

Gracias de antemano ;)

Antonio
13 de Enero del 2005
Hola. Hace ya algunos meses yo también me encontré con este problema, y logre resolverlo. Deje un ejemplo de solución en otro foro. Para no repetir lo mismo que la otra vez, mejor pincha en este enlace: http://www.elguruprogramador.com.ar/foros/mensaje.asp?id=2205

agoraquimica
13 de Enero del 2005
Si tienes las fechas en una base de datos, lo mejor es dejar que lo haga MySQL.
SELECT fecha1, fecha2, DATEDIFF(fecha1,fech2) FROM ...

De esta forma, la 3ra columna es la diferencia entre fechas.

Puedes también en php utilizar esta función (Muucho más lento...)

function datediff($interval, $date1, $date2) {
// Function roughly equivalent to the ASP "DateDiff" function

/* Get the seconds first */
$seconds = strtotime($date2) - strtotime($date1);

$date1=date("Y-m-d", strtotime($date1));
$date2=date("Y-m-d",strtotime($date2));

switch($interval) {
case "y":
list($year1, $month1, $day1) = split('-', $date1);
list($year2, $month2, $day2) = split('-', $date2);
$time1 = (date('H',$date1)*3600) + (date('i',$date1)*60) + (date('s',$date1));
$time2 = (date('H',$date2)*3600) + (date('i',$date2)*60) + (date('s',$date2));
$diff = $year2 - $year1;
if($month1 > $month2) {
$diff -= 1;
} elseif($month1 == $month2) {
if($day1 > $day2) {
$diff -= 1;
} elseif($day1 == $day2) {
if($time1 > $time2) {
$diff -= 1;
}
}
}
break;
case "m":
/* parses the year, month and days. split() was replaced with explode(), PHP Manual says it's faster */
list($year1, $month1, $day1) = explode('-', $date1);
list($year2, $month2, $day2) = explode('-',$date2);

$time1 = (date('H',$date1)*3600) + (date('i',$date1)*60) + (date('s',$date1));
$time2 = (date('H',$date2)*3600) + (date('i',$date2)*60) + (date('s',$date2));

$diff = ($year2 * 12 + $month2) - ($year1 * 12 + $month1);

if($day1 > $day2) {
$diff -= 1;
} elseif($day1 == $day2) {
if($time1 > $time2) {
$diff -= 1;
}
}
break;
case "w":
// Only simple seconds calculation needed from here on
$diff = floor($seconds / 604800);
break;
case "d":
$diff = floor($seconds / 86400);
break;
case "h":
$diff = floor($seconds / 3600);
break;
case "i":
$diff = floor($seconds / 60);
break;
case "s":
$diff = $seconds;
break;
}
//return the +ve integer only
if ($diff<0){
$diff=0-$diff;
}
return $diff;
}

AQ
----------------------------------------------------------------------
www.Foroquimica.com Hosting desde 5.95€/año
www.E-proyectos.com Freelancers al mejor precio.
----------------------------------------------------------------------