Вместо работы с отформатированными датами работайте с их временными метками. Либо конвертируйте их обратно с strtotime()
, либо используйте time()
вместо даты. Метки времени можно сравнивать как обычные числа, потому что они просто такие.
Хорошо :) Давайте начнем здесь:
$date = date; // Wrong!
print $date("d/m/Y");
Вышеуказанное работает только потому, что PHP считает date
константой. Но так как вы не установили эту константу, PHP преобразует ее в строку «дата». Так что $date
содержит 'date'
. Затем при вызове $date()
в качестве функции PHP оценивает содержимое $date
, то есть 'date'
, и использует его в качестве имени функции, например, date()
. То, что вы действительно хотели сделать, это просто $date = date('d/m/y')
.
Вот как работает дата:
string date ( string $format [, int $timestamp ] )
Первый аргумент - желаемый формат вывода, второй аргумент - необязательная временная метка, для которой будет сгенерирован вывод. Если опущено, это будет сейчас. Функция возвращает вывод в виде строки.
Я предполагаю, что ваши $ duedates уже отформатированы, например, 2010-04-06. Поэтому, когда вы делаете $duedate < $date
, вы действительно делаете сравнение строк, потому что обе переменные содержат отформатированные строки, но не временные метки.
Временные метки с другой стороны - просто цифры. Отметка времени - это текущее время, измеренное в секундах с начала эпохи Unix (1 января 1970 г., 00:00:00 по Гринвичу). Вы можете получить метку времени для текущей даты и времени с помощью функции time()
и преобразовать строки, представляющие даты, с помощью strtotime()
. Поэтому, если вы хотите сравнить свои даты, сделайте
if ( strtotime($duedate) < time() ) { // ... do something
И это действительно все, что нужно.