2017-01-04 2 views
0

Использование логических операторов с датами php работает не совсем корректно. Он может решить, что 2016 год - до 2017 года, но не может понять, что 1-й - до 4-го числа в текущем месяце.PHP даты не совсем работают

Я заметил такую ​​ошибку на некоторое время сейчас: как лучше исправить и избежать этого?

$date_extra_early = date("2017-01-1 07:30:00"); 
$today = date("Y-m-d H:i:s"); 
var_dump($today); 
var_dump($date_extra_early); 
if ($today>$date_extra_early) 
        echo("today is greater than date extra early\n"); 
else echo("today is less than date extra early\n"); 

Выходы

строка (19) "2017-01-04 14:50:32" строка (18) "2017-01-1 7:30:00" сегодня является менее чем на дату досрочно

+1

вы пробовали его с правильным значением даты и времени в качестве входных данных? '$ date_extra_early = date (" 2017-01-01 07:30:00 ");' – feeela

+0

@feeela Хорошо, что ведущий ноль сделал этот логический оператор, но это не просто опечатка. Я заметил, действительно ли фальшивая надежность дат. Времена, от которого я зависел, и это катастрофически упало. Удивление, если есть способ помочь гарантировать, что он будет работать по назначению. – Stumbler

+0

не может проверить на данный момент, но попробуйте 'if (strtotime (" $ today ")> strtotime (" $ date_extra_early ")) ...' –

ответ

3

Вы можете сравнить объекты DateTime в пользу строк (последние возвращаются date()). Логические операции, такие как ==, <, >, <=, >=, работают как шарм с объектами DateTime. Кроме того, конструктор DateTime понимает множество разных входных форматов и также помогал бы с неправильным вводом.

$earlydate = new DateTime('2017-01-1 07:30:00'); 
$today = new DateTime('now'); 

if($today > $earlydate) 
    echo 'today is greater than date extra early'; 
else 
    echo 'today is less than date extra early'; 

Смотрите также: http://php.net/manual/en/class.datetime.php

+0

В чем разница между датой и датой? – Stumbler

+4

Это время, когда вы должны подумать о себе: «Я должен посоветоваться с руководством». –

1

Вам необходимо указать дату в правильном формате datetime

$date_extra_early = date("2017-01-01 07:30:00"); 
           //^missing a leading 0 here 

demo

Или вы могли бы тайная дату в целое и сравнить

if (strtotime($today)>strtotime($date_extra_early)) { 
    echo("today is greater than date extra early\n"); 
} else { 
    echo("today is less than date extra early\n"); 
} 

В обоих случаях он печатает

сегодня больше, чем дата начала дополнительного

demo

+0

Неправильно, первый параметр для функции date() 'является строкой формата. Без каких-либо символов формата функция ничего не делает, поэтому просто выводит вход. – jeroen

1

Вы действительно должны использовать правильный формат даты(). В этом случае вам не хватает ведущих 0 перед 1 (день)

$date_extra_early = date("2017-01-01 07:30:00"); 
$today = date("Y-m-d H:i:s"); 
var_dump($today); 
var_dump($date_extra_early); 
if ($today>$date_extra_early) 
    echo("today is greater than date extra early\n"); 
else 
    echo("today is less than date extra early\n"); 

Выходы:

string '2017-01-04 22:00:57' (length=19) 
string '2017-01-01 07:30:00' (length=19) 
today is greater than date extra early 
Смежные вопросы