Как я могу поработать, если дата уже или до сегодняшнего дня?

Мое веб-приложение состоит из системы типа библиотеки, в которой у книг есть сроки.

У меня есть текущая дата, отображаемая на моей странице, просто используя это:

date_default_timezone_set('Europe/London'); $date = date; print $date("d/m/Y"); 

Я установил «дату» как переменную, потому что не уверен, имеет ли значение, когда я использую ее в выражении IF, о котором вы видите, на моей странице книг в библиотеках.

На этой странице я просто выводю даты подачи книг, у многих есть даты, которые еще не достигли сегодняшней даты, и другие, у которых даты больше, чем сегодня. В принципе, все, что я хочу, – это дата, когда она будет выделена жирным шрифтом (или сильным), если она прошла сегодняшнюю дату (отображаемая дата системы). Это то, что я и думал, будет работать:

 <? if ($duedate < $date) { echo '<td><strong>'; } else { echo '<td>'; } ?> <?php echo $date('d/m/Y', $timestamp);?></strong></td> 

Я объявил $ timestamp как var, который преобразует дату формата MySQL по умолчанию в британскую версию. Может кто-нибудь мне помочь? Я думал, что это было бы очень прямо!

пытаться:

 if (strtotime($duedate) < time()) { // oooh, your book is late! } 

Вместо работы с отформатированными датами работайте со своими метками времени. Либо преобразуйте их обратно с помощью strtotime() либо используйте time() вместо даты. Временные метки можно сравнить, как обычные цифры, потому что это то, что они есть.


Хорошо. Давайте начнем здесь:

 $date = date; // Wrong! print $date("d/m/Y"); 

Вышеизложенное работает только потому, что PHP считает date постоянной. Но так как вы не установили эту константу, PHP преобразует ее в строку «date». Таким образом, $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 

И это действительно все, что нужно.