2011-02-22 13 views
20

tengo este código:PHP: Fecha más grande que la fecha actual

$curdate = '22-02-2011'; 

$mydate = '10-10-2011';      

if($curdate > $mydate) 
{ 
    echo '<span class="status expired">Expired</span>'; 
} 

Esto se haría eco de vencimiento y que no debería porque $ mydate está en el futuro y por lo tanto menor que los $ CURDATE pero PHP está mirando JUSTO los dos primeros números 22 y 10 en lugar de toda la cadena. ¿Cómo puedo arreglar esto?

Gracias

Respuesta

49

Intenta convertir a los dos a las marcas de tiempo primero, y luego comparar dos valor convertido:

$curdate=strtotime('22-02-2011'); 
$mydate=strtotime('10-10-2011'); 

if($curdate > $mydate) 
{ 
    echo '<span class="status expired">Expired</span>'; 
} 

Esto los convierte en el número de segundos desde el 1 de enero de 1970, por lo que su comparación debe trabajar .

+0

Gracias :) funciona muy bien. – Cameron

+3

@Cameron ¿No le parece un poco excesivo definir una variable en un formato incorrecto y luego convertirla a otra? ¿Por qué no definirlo ya en el formato correcto? –

+0

¿Qué tal si me gustaría saber que la fecha actual es menos de 1 mes con mydate? ¿Como hacer eso? – Eli

6

El problema es que sus variables actuales son cadenas y no variables de tiempo.

Trate de hacer esto:

$curdate = strtotime('22-02-2011'); 

$mydate = strtotime('10-10-2011'); 
+1

+1 para explicar por qué el resultado inesperado. – jondavidjohn

1

uso Clases de fecha/hora del PHP para convertir estas representaciones de cadena en algo que se puede comparar directamente utilizando getTimestamp() para comparar los tiempos de UNIX.

Si está seguro de que todas sus fechas están en este formato, puede encadenarlas en YYYY-MM-DD, y una comparación de cadenas funcionará correctamente.

1
if(strtotime($curdate) > strtotime($mydate)) 
{ 
... 
} 
-4

Es muy simple

$curdate = '2011-02-22'; 
$mydate = '2011-10-10';      

if($curdate > $mydate) 
{ 
    echo '<span class="status expired">Expired</span>'; 
} 
+0

y ¿qué pasa si el OP no puede cambiar el formato de fecha en la fuente? – drudge

+1

@jnpcl ¡qué extraño capricho de él sería! ¿Por qué cambiar un formato adecuado a otra cosa? –

+0

@Col. Shrapnel: En mi trabajo, tengo que lidiar con sistemas heredados que solo dan fechas como 'MMDDYY' ​​.. Por mucho que me gustaría cambiarlos a algo apropiado, no puedo. A veces estás atrapado con un mal formato. – drudge

3
$row_date = strtotime($the_date); 
$today = strtotime(date('Y-m-d')); 

if($row_date >= $today){ 
    ----- 
} 
+0

¡Bienvenido a Stack Overflow! Si bien este fragmento de código puede resolver el problema, no explica por qué o cómo responde la pregunta. Por favor [incluya una explicación para su código] (// meta.stackexchange.com/q/114762/269535), ya que eso realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código.** Marcadores/revisores: ** [Para respuestas de solo código como este, downvote, no eliminar!] (// meta.stackoverflow.com/a/260413/2747593) –

Cuestiones relacionadas