Как я могу работать, если дата на сегодня или раньше? - PullRequest
3 голосов
/ 06 апреля 2010

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

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

date_default_timezone_set('Europe/London');

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

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

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

<?
if ($duedate < $date) {
  echo '<td><strong>';
} else {
  echo '<td>';
} ?>

<?php echo $date('d/m/Y', $timestamp);?></strong></td>

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

Ответы [ 2 ]

12 голосов
/ 06 апреля 2010

попробуй:

if (strtotime($duedate) < time()) {
    // oooh, your book is late!
}
0 голосов
/ 06 апреля 2010

Вместо работы с отформатированными датами работайте с их временными метками. Либо конвертируйте их обратно с 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...