Respuestas:
strtotime($var);
Lo convierte en un valor de tiempo.
time() - strtotime($var);
Te da los segundos desde $var
if((time()-(60*60*24)) < strtotime($var))
Verificará si $var
ha estado dentro del último día.
Ese formato es perfectamente apropiado para una comparación de cadenas estándar, p. Ej.
if ($date1 > $date2){
//Action
}
Para obtener la fecha de hoy en ese formato, simplemente use: date("Y-m-d H:i:s")
.
Entonces:
$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";
if ($date < $today) {}
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.
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 el yyyy-mm-dd
formato (o yyyymmdd
) alrededor de 1998 cuando me di cuenta de que se ordena mucho más rápido incluso en el servidor SQL.
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());
}
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+:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
Puedes usar la DateTime
clase:
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2021-01-01 00:00:00");
Operadores de comparación de trabajo *:
var_dump($past < $now); // bool(true)
var_dump($future < $now); // bool(false)
var_dump($now == $past); // bool(false)
var_dump($now == new DateTime()); // bool(true)
var_dump($now == $future); // bool(false)
var_dump($past > $now); // bool(false)
var_dump($future > $now); // bool(true)
También es posible tomar los valores de la marca de tiempo de los objetos DateTime y compararlos:
var_dump($past ->getTimestamp()); // int(1262286000)
var_dump($now ->getTimestamp()); // int(1431686228)
var_dump($future->getTimestamp()); // int(1577818800)
var_dump($past ->getTimestamp() < $now->getTimestamp()); // bool(true)
var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)
* Tenga en cuenta que ===
devuelve falso al comparar dos objetos DateTime diferentes, incluso cuando representan la misma fecha.
$future
Se ha convertido en el pasado. : P
$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today) > strtotime($expiry)); //false or true
$var
igual también en OP
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 future
if ( 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 $input
supondrá 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.";
}
¡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 $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
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
(el ejemplo de w3schools, funciona perfecto)
Ampliando la respuesta de Josua de w3schools:
//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 dates
if ($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!
Comparar objetos de fecha y hora:
(Escogí 10 días; cualquier cosa anterior a 10 días es "ANTIGUA", de lo contrario, "NUEVA")
$now = new DateTime();
$diff=date_diff($yourdate,$now);
$diff_days = $diff->format("%a");
if($diff_days > 10){
echo "OLD! " . $yourdate->format('m/d/Y');
}else{
echo "NEW! " . $yourdate->format('m/d/Y');
}
¡Algunas respuestas dadas no tienen en consideración el día actual!
Aquí está mi propuesta.
$var = "2010-01-21 00:00:00.0"
$given_date = new \DateTime($var);
if ($given_date == new \DateTime('today')) {
//today
}
if ($given_date < new \DateTime('today')) {
//past
}
if ($given_date > new \DateTime('today')) {
//future
}
Si haces cosas con tiempo y fechas, Carbon es tu mejor amigo;
Instale el paquete entonces:
$theDay = Carbon::make("2010-01-21 00:00:00.0");
$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))
lt = menor que, gt = mayor que
Como en la pregunta:
$theDay->gt(Carbon::today()) ? true : false;
y mucho más;