Esa es la belleza de ese formato: ordena muy bien. Por supuesto, eso puede ser menos eficiente, dependiendo de sus circunstancias exactas, pero también podría ser mucho más conveniente y conducir a un código más fácil de mantener; necesitaríamos saber más para realmente tomar esa decisión.
Para la zona horaria correcta, puede usar, por ejemplo,
date_default_timezone_set('America/New_York');
Haga clic aquí para consultar las zonas horarias PHP disponibles.
@anushr, si se necesita una zona horaria en comparación, la diferencia horaria se puede agregar hasta la fecha antes de comparar. Esto es aún más rápido que intentar convertir dos cadenas mm/dd/yyyyde fecha y hora en formato a fecha y luego compararlo. Siempre me preocupa cuando los desarrolladores tienen fechas en múltiples zonas horarias en su sistema. Creo que es mejor almacenar fechas en su sistema, siempre en una zona horaria única y luego mostrarla en la zona horaria requerida. Comencé a usar el yyyy-mm-ddformato (o yyyymmdd) alrededor de 1998 cuando me di cuenta de que se ordena mucho más rápido incluso en el servidor SQL.
AaA
59
Aqui tienes:
function isToday($time)// midnight second{return(strtotime($time)=== strtotime('today'));}
isToday('2010-01-22 00:00:00.0');// true
Además, algunas funciones de ayuda más:
function isPast($time){return(strtotime($time)< time());}function isFuture($time){return(strtotime($time)> time());}
¿Por qué la extraña lógica al revés y los booleanos extraños? ¿Por qué no simplemente "return strtotime ($ time) == strtotime ('today')", "return strtotime ($ time)> time ()" y "return strtotime ($ time) <time ()"?
Bobby Jack
@Bobby Jack: Tenía más funcionalidad en esas funciones, olvidé eliminar el código adicional. Corregido ahora.
Alix Axel
+1 en la función auxiliar, específicamente isPast b / c Acabo de ejecutar a if(strtotime('2013-01-22 00:00:00.00') < time()){....}y eso lo hice por mí.
MDMoore313
47
Para completar BoBby Jack, el uso de DateTime OBject, si tiene php 5.2.2+:
if(newDateTime()>newDateTime($var)){// $var is before today so use it}
Esto no es correcto. Si $ var es el día actual (después de la medianoche exacta), el nuevo DateTime () será más grande que el nuevo DateTime ($ var) y no es cierto que $ var sea antes de hoy.
$toBeComparedDate ='2014-08-12';
$today =(newDateTime())->format('Y-m-d');//use format whatever you are using
$expiry =(newDateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today)> strtotime($expiry));//false or true
Y necesita PHP> = 5.4 para (nuevo DateTime ()) -> formato ('Ym-d');
webrama.pl
6
Una advertencia basada en mi experiencia, si su propósito solo involucra la fecha, tenga cuidado de incluir la marca de tiempo . Por ejemplo, decir hoy es "2016-11-09". La comparación que implica la marca de tiempo anulará la lógica aquí. Ejemplo,
// input
$var ="2016-11-09 00:00:00.0";// check if date is today or in the futureif( time()<= strtotime($var)){// This seems right, but if it's ONLY date you are after// then the code might treat $var as past depending on// the time.}
El código anterior parece correcto, pero si SOLO es la fecha que desea comparar, entonces, el código anterior no es la lógica correcta. ¿Por qué? Porque, time () y strtotime () proporcionarán incluir la marca de tiempo. Es decir, a pesar de que ambas fechas caen en el mismo día, pero la diferencia en el tiempo será importante. Considere el siguiente ejemplo:
// plain date string
$input ="2016-11-09";
Debido a que la entrada es una cadena de fecha simple, el uso strtotime()de $inputsupondrá que es la medianoche del 09/11/2016. Por lo tanto, correr en time()cualquier momento después de la medianoche siempre tratará$input pasado, incluso si son el mismo día.
Para solucionar esto, simplemente puede codificar, así:
if(date("Y-m-d")<= $input){
echo "Input date is equal to or greater than today.";}
Estoy seguro de que OP consideró esto y es por eso que incluyeron '00: 00: 00.0' en su pregunta
AaA
6
¡Pocos años después, secundo la observación de Bobby Jack de que las últimas 24 horas no son hoy! Y me sorprende que la respuesta haya sido tan votada ...
Para comparar si una fecha determinada es menor, igual o mayor que otra, primero debe "rechazarlas" al comienzo del día. En otras palabras, asegúrese de estar hablando de la misma hora 00:00:00 en ambas fechas. Esto se puede hacer de manera simple y elegante como:
strtotime("today")<=> strtotime($var)
si $vartiene la parte de tiempo en 00:00:00 como el OP especificado.
Reemplazar <=> con lo que necesite (o manténgalo así en php 7)
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);//now compare the two datesif($intDiff >0){echo '$date1 is in the past';}else{echo 'date1 is today or in the future';}
Espero que esto ayude. ¡Mi primer post en stackoverflow!
Respuestas:
Lo convierte en un valor de tiempo.
Te da los segundos desde
$var
Verificará si
$var
ha estado dentro del último día.fuente
Ese formato es perfectamente apropiado para una comparación de cadenas estándar, p. Ej.
Para obtener la fecha de hoy en ese formato, simplemente use:
date("Y-m-d H:i:s")
.Entonces:
Esa es la belleza de ese formato: ordena muy bien. Por supuesto, eso puede ser menos eficiente, dependiendo de sus circunstancias exactas, pero también podría ser mucho más conveniente y conducir a un código más fácil de mantener; necesitaríamos saber más para realmente tomar esa decisión.
Para la zona horaria correcta, puede usar, por ejemplo,
Haga clic aquí para consultar las zonas horarias PHP disponibles.
fuente
mm/dd/yyyy
de fecha y hora en formato a fecha y luego compararlo. Siempre me preocupa cuando los desarrolladores tienen fechas en múltiples zonas horarias en su sistema. Creo que es mejor almacenar fechas en su sistema, siempre en una zona horaria única y luego mostrarla en la zona horaria requerida. Comencé a usar elyyyy-mm-dd
formato (oyyyymmdd
) alrededor de 1998 cuando me di cuenta de que se ordena mucho más rápido incluso en el servidor SQL.Aqui tienes:
Además, algunas funciones de ayuda más:
fuente
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
y eso lo hice por mí.Para completar BoBby Jack, el uso de DateTime OBject, si tiene php 5.2.2+:
fuente
Puedes usar la
DateTime
clase:Operadores de comparación de trabajo *:
También es posible tomar los valores de la marca de tiempo de los objetos DateTime y compararlos:
* Tenga en cuenta que
===
devuelve falso al comparar dos objetos DateTime diferentes, incluso cuando representan la misma fecha.fuente
$future
Se ha convertido en el pasado. : Pfuente
$var
igual también en OPUna advertencia basada en mi experiencia, si su propósito solo involucra la fecha, tenga cuidado de incluir la marca de tiempo . Por ejemplo, decir hoy es
"2016-11-09"
. La comparación que implica la marca de tiempo anulará la lógica aquí. Ejemplo,El código anterior parece correcto, pero si SOLO es la fecha que desea comparar, entonces, el código anterior no es la lógica correcta. ¿Por qué? Porque, time () y strtotime () proporcionarán incluir la marca de tiempo. Es decir, a pesar de que ambas fechas caen en el mismo día, pero la diferencia en el tiempo será importante. Considere el siguiente ejemplo:
Debido a que la entrada es una cadena de fecha simple, el uso
strtotime()
de$input
supondrá que es la medianoche del 09/11/2016. Por lo tanto, correr entime()
cualquier momento después de la medianoche siempre tratará$input
pasado, incluso si son el mismo día.Para solucionar esto, simplemente puede codificar, así:
fuente
¡Pocos años después, secundo la observación de Bobby Jack de que las últimas 24 horas no son hoy! Y me sorprende que la respuesta haya sido tan votada ...
Para comparar si una fecha determinada es menor, igual o mayor que otra, primero debe "rechazarlas" al comienzo del día. En otras palabras, asegúrese de estar hablando de la misma hora 00:00:00 en ambas fechas. Esto se puede hacer de manera simple y elegante como:
si
$var
tiene la parte de tiempo en 00:00:00 como el OP especificado.Reemplazar
<=>
con lo que necesite (o manténgalo así en php 7)Además, obviamente, estamos hablando de la misma zona horaria para ambos. Para la lista de zonas horarias compatibles
fuente
(el ejemplo de w3schools, funciona perfecto)
fuente
Ampliando la respuesta de Josua de w3schools:
Espero que esto ayude. ¡Mi primer post en stackoverflow!
fuente
Comparar objetos de fecha y hora:
(Escogí 10 días; cualquier cosa anterior a 10 días es "ANTIGUA", de lo contrario, "NUEVA")
fuente
¡Algunas respuestas dadas no tienen en consideración el día actual!
Aquí está mi propuesta.
fuente
Si haces cosas con tiempo y fechas, Carbon es tu mejor amigo;
Instale el paquete entonces:
lt = menor que, gt = mayor que
Como en la pregunta:
y mucho más;
fuente