Al echar un vistazo a la documentación de PHP, los siguientes dos métodos del DateTime
objeto parecen resolver mi problema:
- DateTime :: diff : Obtenga la diferencia y úsela para determinar cuál es más antigua.
- DateTime :: getTimestamp : Obtenga la marca de tiempo UNIX y compárelos.
Ambos métodos están marcados en el doco como disponibles en la versión> = 5.3 (y, como es lógico, si trato de llamarlos, encuentro que no existen). No puedo encontrar ninguna documentación específica para 5.2.8, así que no estoy seguro de si hay métodos equivalentes en mi versión. He buscado en Google el problema y ha encontrado una ecléctica variedad de soluciones, ninguna de las cuales responden a mis necesidades muy simples:
- ¿Cómo comparo dos objetos DateTime?
- ¿Dónde puedo encontrar el doco para versiones anteriores de PHP? Específicamente la versión 5.2.8?
Para algún contexto, tengo el siguiente 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 no hay operador de comparación en este tipo.
Editar
Aparentemente, mis suposiciones eran completamente falsas (gracias Milen por ilustrar esto tan efectivamente). Hay un operador de comparación y funciona bien, gracias. A veces realmente extraño un compilador. El error está en el código anterior, estoy seguro de que lo encontrará mucho más rápido que yo :).
$_POST
vars, o el gatito será asesinado.Respuestas:
Lo siguiente parece confirmar que hay operadores de comparación para la clase DateTime:
fuente
DateTime
s con la misma fecha no se compararán como iguales cuando cree que deberían hacerlo. Puede remediar esto estableciendo explícitamente los componentes de tiempo del objeto a cero antes de compararlos.De la documentación oficial :
Para las versiones de PHP anteriores a 5.2.2 (en realidad para cualquier versión), puede usar diff .
fuente
También puede comparar los segundos de época:
Fuente: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (artículo bastante interesante sobre DateTime)
fuente
format
produce una cadena , así que es una comparación de cadena. Apenas es un problema después del tiempo de 1000000000 (aproximadamente el 9 de septiembre de 2001), pero si tiene que lidiar con las fechas antes de eso, puede incurrir en problemas debido a diferentes longitudes de números. O convierta los resultados a números (restarlos también funciona), o use un formato verdaderamente ordenable comoc
.Si desea comparar fechas y no horas, puede usar esto:
fuente
$d1->setTime(0, 0, 0);
A partir de PHP 7.x, puede usar lo siguiente:
fuente
fuente
Esto puede ayudarte.
fuente
$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";}
saludos.