2013-07-30 3 views
-2

я получаю некоторые ДАННЫЕ с датами из базы данных:PHP - Как найти, если дата находится между 2 датами

$data['my_date']) 

Тип является дата: YYYY-MM-DD

Я хотел бы сделать с PHP условием для найденных если $ данных [ «my_date»]) между 2 датами, как:

if ($data['my_date'] >= 2009-01-01 && $data['my_date'] <= 2009-12-31) { 
    $datas = '5'; 
} 
else { 
    $datas = 1; 
} 

это не работает, как ожидалось, то условие не проверяется. Что мне делать ?

+1

Вы должны процитировать ваши даты, или же они интерпретируются как целые операции ('2009-01- 01 == 2007') –

+0

@ CarlosCampderrós вы должны опубликовать свой ответ («нужно процитировать ваши даты»), потому что это было решение. Я смущен, что совершил эту ошибку. –

+0

@ SébastienGicquel отправлен как ответ. И не волнуйтесь, у всех нас были глупые необъяснимые ошибки в прошлом ;-) –

ответ

1

Не существует литерального синтаксиса для дат, вы должны заключить их в кавычки и рассматривать их как строки. Если вы используете формат YYYY-MM-DD, то он сортируется в алфавитном порядке, и ваш текущий метод должен работать.

if ($data['my_date'] >= '2009-01-01' && $data['my_date'] <= '2009-12-31') { 
    $datas = '5'; 
} 
else { 
    $datas = 1; 
} 

Если вы не процитировать ваши даты, вы делаете целочисленные операции:

$data['my_date'] >= 2009-01-01 ====> $data['my_date'] >= 2007 
1

Вам необходимо преобразовать все даты по strtotime() в timestamp, а затем сравнить их.

strtotime($data['my_date']) >= strtotime('2009-01-01')... 
+0

не нужно вызывать 'strtotime', если все даты« YYYY-MM-DD »(этот формат сортируется в алфавитном порядке/численно). –

+0

@ Карлос: нет гарантии, лучше быть на безопасной стороне –

+1

@RaheelHasan Спасибо, очень просто, я пробовал с strtotime() раньше, но это не сработало, потому что я забыл цитату «вокруг даты strtotime ('2009-01-01') –

1

Вы можете использовать либо strtotime() или mktime() для преобразования даты в метку времени, а затем сравнить его.