2010-02-20 6 views
1

Я пытаюсь сделать календарь доступности и должен знать, как я могу сравнить даты при его получении.Как сравнить и выбрать дату в CakePHP?

Моя БД

id 
start_date 
end_date 
status 

Теперь предположим, что я хочу принести бронирование в следующем месяце, то есть от 2010-03-01 до 2010-04-01. Как получить эти данные? Я попытался сравнить непосредственно с использованием и условия, но это не помогло.

Формат в БД - yyyy-mm-dd, и я использовал то же самое для сравнения. Но прямое сравнение не работает.

ответ

3

Как выбирать диапазоны дат, которые пересекаются с другим диапазоном экспертно описано здесь: Comparing date ranges

Таким образом, вы, вероятно, хотите запросить что-то вроде этого:

$start = date('Y-m-d'); 
$end = date('Y-m-d', strtotime('+1 month')); 

$conditions = array('Event.start <=' => $end, 'Event.end >=' => $start); 

$this->Event->find('all', array('conditions' => $conditions)); 

Найдет все события в в следующем месяце. Они могут начинаться раньше или позже, но они пересекаются с месяцем.

1

Предполагая, что ваша таблица с именем События и даты хранятся в $ датой_начала и $ end_date, я считаю, что это должно работать:

$results = $this->Event->find('all', array(
    'conditions' => array(
     'start_date >=' => $start_date, 
     'end_date <' => $end_date 
    ) 
)); 

Он будет получать все записи, которые начинаются и заканчиваются в пределах своего диапазона.

+0

Я стараюсь то же самое .. но кажется, что он не работает. \t \t $ books = $ this-> Property-> Booking-> find ('all', array ('conditions' => array ("Booking .property_id "=> $ P_id," Booking.start_date> = "=> $ cur_start_date," Booking.end_date <"=> $ cur_end_date))); – 2010-02-20 16:10:07

+0

- это правильный SQL-запрос (app/config/core.php - debug = 2)? Можете ли вы запросить данные «вручную»? – harpax

Смежные вопросы