Почему PHP не распознает дату, указанную после сегодняшней даты? - PullRequest
0 голосов
/ 03 октября 2011

Я хочу сравнить две даты в PHP. Одна дата - это дата, которая должна быть предоставлена ​​пользователем, сохранена в базе данных и получена с помощью PHP. Вторая - сегодняшняя дата.

    $unixdue = strtotime($query['date_due']); //Converts the database integer to Unix date
    $duestamp = date("dmY", $unixdue); //Converts the Unix date to dd-mm-yyyy


//If the due date is larger than today (i.e., after today), it's early.
        if ($query['complete'] == 0 AND date("dmY") < $duestamp) {echo "Early";}
//If the due date is smaller than today (i.e., before today), it's late.
        elseif ($query['complete'] == 0 AND date("dmY") > $duestamp) {echo "Late";}
//If the due date IS today, it's today.
        elseif ($query['complete'] == 0 AND date("dmY") == $duestamp) {echo "Today";}

Он работает с датами, которые есть сегодня, но все остальные возвращают «Ранний», даже если они не ранние. Из-за этого я даже не могу сказать, работает ли все остальное.

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

Ответы [ 4 ]

3 голосов
/ 03 октября 2011

Вы не можете сравнить, две строки меньше или больше друг друга. Или вы можете , но в этом случае вы не должны , потому что результаты не соответствуют вашим ожиданиям (например, «03092011»

Вы можете сначала сравнить, совпадают ли даты, как вы сделали; если нет, вы можете сравнить временные метки. Даже если вы используете только даты, это не имеет значения, потому что отметка времени более ранней даты всегда меньше отметки времени более поздней даты, независимо от части времени.

if( $query['complete'] == 0 ) {
    if( date("dmY") == $duestamp ) { echo "Today"; }
    elseif( time() < $unixdue ) { echo "Early"; }
    elseif( time() > $unixdue ) { echo "Late"; }
}
1 голос
/ 03 октября 2011

Вы сравниваете неправильно.

Возможное решение будет использовать date('Ymd'), но еще лучше использовать метки времени как time() и $unixdue

0 голосов
/ 03 октября 2011

вы слишком усложнили свой код, введя временную метку unix, абсолютно без необходимости
и, кажется, вам нужно перенести проверку полноты в SQL-запрос. Так

if     ($query['date_due'] > date("Y-m-d")) echo "Early";
elseif ($query['date_due'] < date("Y-m-d")) echo "Late";
else echo "Today";

и я полагаю, что вы можете переместить это условие и в запрос

0 голосов
/ 03 октября 2011

Используйте функцию time:

$msg = "Late";

if( $unixdue > time() ){
$msg = "Early";
}

if(date("dmY") === $duestamp){
$msg = "Today";
}

Вот здесь , где это задокументировано .

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