Мое веб-приложение состоит из системы типа библиотеки, в которой у книг есть сроки.
У меня есть текущая дата, отображаемая на моей странице, просто используя это:
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
И это действительно все, что нужно.