Как сравнить два объекта DateTime в PHP 5.2.8?

Это похоже на что-то, что должно быть довольно прямолинейным, но я застрял на странице, чтобы устранить эту проблему какое-то время, так что здесь.

Взглянув на документацию PHP, следующие два метода объекта DateTime, похоже, решат мою проблему:

  • DateTime :: diff : получите разницу и используйте это, чтобы определить, что является более древним.
  • DateTime :: getTimestamp : получите timestampt UNIX и сравните их.

Оба эти метода отмечены в doco как доступные в версии> = 5.3 (и, что не удивительно, если я попытаюсь назвать их, я считаю, что их не существует). Я не могу найти какую-либо конкретную документацию для 5.2.8, поэтому я не уверен, есть ли в моей версии эквивалентные методы. У меня проблема с Google и нашел эклектичный диапазон решений, ни один из которых не отвечает моим очень простым требованиям:

  • Как сравнить два объекта DateTime?
  • Где я могу найти doco для предыдущих версий PHP? В частности, версия 5.2.8?

В некотором контексте у меня есть следующий код:

$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) 

По-видимому, на этом парне нет оператора сравнения.

EDIT: По-видимому, мои предположения были полностью ложными (спасибо Милену за это очень хорошо иллюстрирует). Существует оператор сравнения, и он отлично работает. Иногда мне очень не хватает компилятора. Ошибка в коде выше, я уверен, что вы найдете его намного быстрее, чем я. :).

Я с нетерпением жду своего смущения по простоте вашего решения.

EDIT: И, конечно же, возникает смущение …

Solutions Collecting From Web of "Как сравнить два объекта DateTime в PHP 5.2.8?"

Следующее, похоже, подтверждает, что существуют операторы сравнения для класса 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:~# 

Вы также можете сравнить секунды эпохи:

 $d1->format('U') < $d2->format('U') 

Источник: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (довольно интересная статья о DateTime)

Из официальной документации :

Начиная с PHP 5.2.2, объекты DateTime можно сравнить с помощью операторов сравнения .

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

Для версий PHP до 5.2.2 (фактически для любой версии) вы можете использовать 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 

Если вы хотите сравнить даты, а не время, вы можете использовать это:

 $d1->format("Ymd") == $d2->format("Ymd") 
 $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'; } 

Это может вам помочь.

 $today = date("mdY 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"; }