Como posso verificar se a data / hora atual já passou de uma data / hora definida?
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?
Desde PHP> = 5.2.2, você pode usar a DateTimeclasse como tal:
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 .
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
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.
presumindo que $objectseja um objeto DateTime, usei if (new DateTime() > $object) {}e funciona incorretamente. Mas if (time() > $bject->getTimeStamp()) {}funciona corretamente. @Salman A
Há também a classe DateTime que implementa uma função para operadores de comparação.
Qual é a função que ele implementa para isso?
— still_dreaming_1 02 de
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.