¿Cómo puedo verificar si la fecha / hora actual ha pasado una fecha / hora establecida?

115

Estoy tratando de escribir un script que verifique si la fecha / hora actual ha pasado 05/15/2010 at 4PM

¿Cómo puedo usar la función date () de PHP para realizar esta verificación?

Dave
fuente

Respuestas:

228

Desde PHP> = 5.2.2 puede usar la DateTimeclase como tal:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

La cadena que se pasa al constructor DateTime se analiza de acuerdo con estas reglas .


Tenga en cuenta que también es posible utilizar las funciones timey strtotime. Ver respuesta original .

Salman A
fuente
6
La marca de tiempo tiene algunas limitaciones, compañero, y algunos errores también, por ejemplo, una marca de tiempo no puede manejar una fecha antes de 1970 y después de 2038 (vea la respuesta de Ivar Koster)
Steel Brain
1
A menudo vemos un abuso de new DateTime () sin parámetro, si está usando fechas UTC (como debería), prefiere usar new DateTime ("ahora", new DateTimeZone ('UTC')). Esto evitará que su aplicación tenga errores incomprensibles en las fechas. le aconsejo que lo almacene en una variable estática de función, una clase estática o en algún otro lugar de su proceso en ejecución ...
Loenix
¿Qué pasa si ya tenemos un objeto DateTime y queremos saber si ha pasado ya que no podemos pasar un objeto al constructor DateTime como sugirió? ¿Deberíamos usar su getTimestamp () y compararlo con time ()? @Salman A
user4271704
@ user4271704 El new DateTime('2010-05-15')es solo un ejemplo, podría ser cualquier objeto DateTime que haya inicializado anteriormente.
Salman A
asumiendo que $objectes un objeto DateTime, lo usé if (new DateTime() > $object) {}y funciona mal. Pero if (time() > $bject->getTimeStamp()) {}funciona correctamente. @Salman A
user4271704
77

También existe la clase DateTime que implementa una función para operadores de comparación.

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}
VolkerK
fuente
1
¿Qué función implementa para esto?
still_dreaming_1
6

Verifique la función de PHP strtotimepara convertir su fecha / hora establecida en una marca de tiempo: http://php.net/manual/en/function.strtotime.php

Si strtotimeno puede manejar su formato de fecha / hora correctamente ("4:00 PM" probablemente funcionará pero no "a las 4:00 PM"), deberá usar funciones de cadena, por ejemplo, substrpara analizar / corregir su formato y recuperar su marca de tiempo a través de otra función, por ejemplo mktime.

Luego compare la marca de tiempo resultante con la fecha / hora actual ( if ($calulated_timestamp > time()) { /* date in the future */ }) para ver si la fecha / hora establecida es en el pasado o en el futuro.

Sugiero leer el PHP-doc sobre las funciones de fecha / hora y volver aquí con parte de su código fuente una vez que se quede atascado.

Seleccionar0r
fuente
vea la respuesta de Ivar Koster
Steel Brain
1
date_default_timezone_set('Asia/Kolkata');

$curDateTime = date("Y-m-d H:i:s");
$myDate = date("Y-m-d H:i:s", strtotime("2018-06-26 16:15:33"));
if($myDate < $curDateTime){
    echo "active";exit;
}else{
    echo "inactive";exit;
}
Rakesh Kumar Pradhan
fuente
Seguramente esto no funcionará como $myDateserá igual string (0) "".
Nikola Petkanski