Examinando a documentação do PHP, os dois métodos a seguir do DateTime
objeto parecem resolver o meu problema:
- DateTime :: diff : obtenha a diferença e use-a para determinar qual é a mais antiga.
- DateTime :: getTimestamp : obtenha o timestamp do UNIX e compare-o.
Ambos os métodos estão marcados no documento como disponíveis na versão> = 5.3 (e, não surpreendentemente, se eu tentar chamá-los, acho que eles não existem). Não consigo encontrar nenhuma documentação específica para o 5.2.8, portanto, não tenho certeza se existem métodos equivalentes na minha versão. Eu pesquisei o problema e encontrou uma gama eclética de soluções, nenhuma das quais responder às minhas exigências muito simples:
- Como eu comparo dois objetos DateTime?
- Onde posso encontrar o documento para versões anteriores do PHP? Especificamente versão 5.2.8?
Para algum contexto, eu tenho o seguinte código:
$st_dt = new DateTime(verifyParam ('start_date'));
$end_dt = new DateTime(verifyParam ('end_date'));
// is the end date more ancient than the start date?
if ($end_dt < $start_dt)
Aparentemente, não há operador de comparação nesse cara.
Editar
Aparentemente, minhas suposições eram completamente falsas (obrigado Milen por ilustrar isso com tanta eficácia). Existe um operador de comparação e funciona muito bem, obrigado. Às vezes, sinto muita falta de um compilador. O bug está no código acima, tenho certeza que você o encontrará muito mais rápido do que eu :).
$_POST
vars, ou o gatinho será morto.Respostas:
O seguinte parece confirmar que existem operadores de comparação para a classe DateTime:
fonte
DateTime
segundos com a mesma data não serão comparados como iguais quando você acredita que deveriam. Você pode remediar isso definindo explicitamente os componentes de tempo do objeto como zero antes de compará-los.A partir da documentação oficial :
Para versões do PHP anteriores à 5.2.2 (na verdade, para qualquer versão), você pode usar o diff .
fonte
Você também pode comparar os segundos da época:
Fonte: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (artigo bastante interessante sobre o DateTime)
fonte
format
produz uma string , então essa é uma comparação de strings. É um problema após o período de 1000000000 (aproximadamente 9 de setembro de 2001), mas se você precisar lidar com datas anteriores , poderá ocorrer problemas devido a diferentes comprimentos de números. Converta os resultados em números (subtrai-los também funciona) ou use um formato verdadeiramente classificável comoc
.Se você deseja comparar datas e não horas, você pode usar o seguinte:
fonte
$d1->setTime(0, 0, 0);
No PHP 7.x, você pode usar o seguinte:
fonte
fonte
Isso pode ajudá-lo.
fonte
$today = new DateTime("now");
$time = DateTime::createFromFormat('d-m-Y',"26-October-1998");
if ($today > $time){echo "today is greater";}else{echo "other time is greater";}
brinde.