Сравнение дат в PHP ведет себя непредсказуемо - PullRequest
1 голос
/ 13 сентября 2011

У меня есть такая строка даты: 2010-9-30 в моей переменной $ date_string.

Когда я сравниваю такие строки:

if ( date( 'Y-m-d', strtotime( "+20 days", $date_string ) ) )
{
    // it returns true for all dates
}

Сравнение верно для всехдаты, даже со вчерашнего дня, который не 20 дней назад.Есть идеи, почему это может произойти?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

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

Другими словами, если date() возвращает истинное значение, ваше условие ИСТИНА. Он всегда будет возвращать истинное значение, если вы не передадите ему недопустимую временную метку во втором параметре (например, 42 февраля)

Если вы хотите сравнить вывод этого вызова date() с другой строкой даты, вам понадобится дополнительный операнд внутри вашего if():

if ('2011-09-02' == date('Y-m-d', strtotime("+20 days", $date_string))) {

}
1 голос
/ 13 сентября 2011

Возвращает дату в формате (например) 2000-01-01, который при преобразовании в логическое значение равен true.

Вместо этого проверьте это:

if (time() > strtotime("+20 days", $date_string)) // Returns true if $date_string was in the last 20 days, or is in the future

Очевидно, что если вы хотите, чтобы даты были старше 20 дней, просто переключите > на <

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