Взглянув на документацию по PHP, следующие два метода DateTime
объекта могут решить мою проблему:
- DateTime :: diff : Получите разницу и используйте ее, чтобы определить, что является более древним.
- DateTime :: getTimestamp : получить метку времени UNIX и сравнить ее.
Оба эти метода отмечены в документе как доступные в версии> = 5.3 (и, что неудивительно, если я попытаюсь вызвать их, я обнаружу, что они не существуют). Я не могу найти какую-либо конкретную документацию для 5.2.8, поэтому я не уверен, есть ли в моей версии эквивалентные методы. Я гуглил проблему и нашел эклектичный ряд решений, ни одно из которых не отвечает моим очень простым требованиям:
- Как сравнить два объекта DateTime?
- Где я могу найти документацию для предыдущих версий 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)
Видимо, на этом парне нет оператора сравнения.
редактировать
Очевидно, мои предположения были полностью ложными (спасибо Милен за столь эффективную иллюстрацию). Есть оператор сравнения, и он работает просто отлично, спасибо. Иногда я действительно скучаю по компилятору. Ошибка в приведенном выше коде, я уверен, вы найдете ее намного быстрее, чем я :).
$_POST
варах, иначе котенка убьют.Ответы:
Следующее, кажется, подтверждает, что есть операторы сравнения для класса DateTime:
источник
DateTime
с одной и той же датой не будут сравниваться как равные, если вы считаете, что они должны это делать. Вы можете исправить это, явно установив временные компоненты объекта на ноль, прежде чем сравнивать их.Из официальной документации :
Для версий PHP до 5.2.2 (фактически для любой версии) вы можете использовать diff .
источник
Вы также можете сравнить секунды эпохи:
Источник: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (довольно интересная статья о DateTime)
источник
format
производит строку , так что это сравнение строк. Это едва проблема после 1000000000 эпох (примерно 9 сентября 2001 года), но если вам придется иметь дело с датами до этого, вы можете столкнуться с проблемами из-за разной длины номеров. Либо конвертируйте результаты в числа (вычитание их тоже работает), либо используйте действительно сортируемый формат вродеc
.Если вы хотите сравнить даты, а не время, вы можете использовать это:
источник
$d1->setTime(0, 0, 0);
Начиная с PHP 7.x, вы можете использовать следующее:
источник
источник
Это может помочь вам.
источник
$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";}
ура