now new español date_format current change php datetime

new - php datetime now



¿Cómo comparo dos objetos DateTime en PHP 5.2.8? (7)

A partir de PHP 7.x, puede utilizar lo siguiente:

$aDate = new /DateTime(''@''.(time())); $bDate = new /DateTime(''@''.(time() - 3600)); $aDate <=> $bDate; // => 1, `$aDate` is newer than `$bDate`

Esto parece algo que debería ser bastante sencillo, pero hace tiempo que me quedé atascado en esta página , así que aquí va.

Echando un vistazo a la documentación de PHP, los dos métodos siguientes del objeto DateTime parecen resolver mi problema:

Ambos métodos están marcados en el documento como disponibles en la versión> = 5.3 (y, como es lógico, si intento llamarlos, encuentro que no existen). No puedo encontrar ninguna documentación específica para 5.2.8, por lo que no estoy seguro de si hay métodos equivalentes en mi versión. He Googled el problema y he encontrado una gama ecléctica de soluciones, ninguna de las cuales responde a mis requisitos 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 un 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 echo de menos un compilador. El error está en el código anterior, estoy seguro de que lo encontrarás mucho más rápido que yo :).

Espero vergüenza de la simplicidad de su solución.

EDIT: Y por supuesto, la vergüenza se produce ...


De la documentación oficial :

A partir de PHP 5.2.2, los objetos DateTime pueden compararse usando operadores de comparación .

$date1 = new DateTime("now"); $date2 = new DateTime("tomorrow"); var_dump($date1 == $date2); // false var_dump($date1 < $date2); // true var_dump($date1 > $date2); // false

Para versiones de PHP anteriores a 5.2.2 (en realidad para cualquier versión), puede usar diff .

$datetime1 = new DateTime(''2009-10-11''); // 11 October 2013 $datetime2 = new DateTime(''2009-10-13''); // 13 October 2013 $interval = $datetime1->diff($datetime2); echo $interval->format(''%R%a days''); // +2 days


Esto puede ayudarte.

$today = date("m-d-Y H:i:s"); $thisMonth =date("m"); $thisYear = date("y"); $expectedDate = ($thisMonth+1)."-08-$thisYear 23:58:00"; if (strtotime($expectedDate) > strtotime($today)) { echo "Expected date is greater then current date"; return ; } else { echo "Expected date is lesser then current date"; }


Lo siguiente parece confirmar que hay operadores de comparación para la clase DateTime:

dev:~# php <?php date_default_timezone_set(''Europe/London''); $d1 = new DateTime(''2008-08-03 14:52:10''); $d2 = new DateTime(''2008-01-03 11:11:10''); var_dump($d1 == $d2); var_dump($d1 > $d2); var_dump($d1 < $d2); ?> bool(false) bool(true) bool(false) dev:~# php -v PHP 5.2.6-1+lenny3 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 26 2009 20:09:03) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies dev:~#


Si desea comparar fechas y no tiempo, puede usar esto:

$d1->format("Y-m-d") == $d2->format("Y-m-d")



$elapsed = ''2592000''; // Time in the past $time_past = ''2014-07-16 11:35:33''; $time_past = strtotime($time_past); // Add a month to that time $time_past = $time_past + $elapsed; // Time NOW $time_now = time(); // Check if its been a month since time past if($time_past > $time_now){ echo ''Hasnt been a month''; }else{ echo ''Been longer than a month''; }