Como posso verificar se a data / hora atual já passou de uma data / hora definida?

115

Estou tentando escrever um script que verificará se a data / hora atual passou do 05/15/2010 at 4PM

Como posso usar a função date () do PHP para fazer essa verificação?

Dave
fonte

Respostas:

228

Desde PHP> = 5.2.2, você pode usar a DateTimeclasse 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
}

A string passada para o construtor DateTime é analisada de acordo com essas regras .


Observe que também é possível usar as funções timee strtotime. Veja a resposta original .

Salman A
fonte
6
timestamp tem algumas limitações, companheiro, e alguns bugs também, por exemplo, um timestamp não consegue lidar com uma data antes de 1970 e depois de 2038 (ver a resposta de Ivar Koster)
Steel Brain
1
Freqüentemente vemos um abuso de new DateTime () sem parâmetro, se você estiver usando datas UTC (como deveria), prefira usar new DateTime ("agora", new DateTimeZone ('UTC')). Isso evitará que seu aplicativo tenha erros incompreensíveis nas datas. Eu aconselho você a armazená-lo em uma variável estática de função, uma classe estática ou em algum outro lugar em seu processo de execução ...
Loenix
E se já tivermos um objeto DateTime e quisermos saber se isso já passou, pois não podemos passar um objeto para o construtor DateTime como você sugeriu? devemos usar seu getTimestamp () e compará-lo com time ()? @Salman A
user4271704
@ user4271704 O new DateTime('2010-05-15')é apenas um exemplo, pode ser qualquer objeto DateTime que você inicializou anteriormente.
Salman A
presumindo que $objectseja um objeto DateTime, usei if (new DateTime() > $object) {}e funciona incorretamente. Mas if (time() > $bject->getTimeStamp()) {}funciona corretamente. @Salman A
user4271704
77

Há também a classe DateTime que implementa uma função para operadores de comparação.

// $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
fonte
1
Qual é a função que ele implementa para isso?
still_dreaming_1 02 de
6

Verifique a strtotimefunção do PHP para converter sua data / hora definida para um carimbo de data / hora: http://php.net/manual/en/function.strtotime.php

Se strtotimenão conseguir lidar com o formato de data / hora corretamente ("16:00" provavelmente funcionará, mas não "às 16:00"), você precisará usar funções de string, por exemplo, substrpara analisar / corrigir seu formato e recuperar seu carimbo de data / hora por meio outra função, por exemplo mktime.

Em seguida, compare o carimbo de data / hora resultante com a data / hora atual ( if ($calulated_timestamp > time()) { /* date in the future */ }) para ver se a data / hora definida está no passado ou no futuro.

Eu sugiro ler o documento PHP sobre funções de data / hora e voltar aqui com um pouco de seu código-fonte quando você ficar preso.

Select0r
fonte
ver a resposta 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
fonte
Certamente isso não funcionará como $myDateserá igual a string (0) "".
Nikola Petkanski