Фильтр по времени во views

Главные вкладки

Аватар пользователя Evil0o Evil0o 4 августа 2015 в 20:46

Задача: фильтровать записи по времени. Пример: получить записи с 12:00 до 20:00 часов

Что я сделал:
Написал custom filter handler в нем вот такой код

<?php  function query() {
    
dpm($this->query );
       
$join = new views_join();
        
$join->table 'field_data_field_data_and_time';
        
$join->field 'entity_id';
        
$join->left_table 'node';
        
$join->left_field 'nid';
        
$join->type 'left';

        

$this->query->add_relationship('field_data_field_data_and_time'$join'node');
        
$this->query->add_where(1'HOUR(from_unixtime(field_data_field_data_and_time.field_data_and_time_value))'"20"'>'); // HOUR(from_unixtime съедаются скобки и получается ошибка
   /*
    * 
    * SET time_zone= 'europe/moscow';
    *
    * SELECT HOUR(from_unixtime(`field_data_and_time_value`)) as hour, minute(from_unixtime(`field_data_and_time_value`)), `entity_id` as nid 
    * FROM `field_data_field_data_and_time`  
    * WHERE HOUR(from_unixtime(`field_data_and_time_value`))*60+minute(from_unixtime(`field_data_and_time_value`)) between 18*60 and 22*60 ;
    * 
    */
    
  
}?>

но проблема в том что я не могу использовать sql функции HOUR from_unixtime чтоб с конвертировать дату в запросе(скобки съедаются)
и не знаю как выполнить between.

sql который я хотел получить в комментариях к коду
Буду благодарен за любую помощь

Комментарии

Аватар пользователя gun_dose gun_dose 5 августа 2015 в 15:05

"Evil0o" wrote:
забыл написать что поле формата Date (Unix timestamp)

Поле добавлено с помощью модуля Date? Перепроверьте ещё раз все форматы и примите к сведению, что timestamp в php и в sql записываются совершенно по-разному.

Аватар пользователя Evil0o Evil0o 8 августа 2015 в 14:58

"gun_dose" wrote:
то timestamp в php и в sql записываются совершенно по-разному
ключевое слово Unix. Не совсем понимаю о чем ты, но у меня все работает ок.
Немного о датах, чтоб проблем с часовыми поясами не было и конвертацией, использовал такой треш HOUR(CONVERT_TZ(from_unixtime(field_data_field_data_and_time.field_data_and_time_value),\'UTC\', \'Europe/Moscow\'))

Решение с тем что $this->query->add_where съедает скобки, надо использовать $this->query->add_where_expression(1, $sql) проблема с between тоже снимается.