CakePHP: диапазон дат - PullRequest
       0

CakePHP: диапазон дат

1 голос
/ 15 февраля 2012

Есть ли лучший способ для меня рассчитать следующее (я пытаюсь извлечь все «Элементы действий» со вчерашнего дня и сохранить их в «paste_due», а также все элементы действий на сегодня и сохранить их в «сегодня»)- Это внутри моего контроллера «Агенты» (Agent 'hasMany' ActionItem и ActionItem 'ownTo' Agent):

public function planner() {

    $yesterday = date("Y-m-d 23:59:59", strtotime("yesterday"));
    $conditions = array('ActionItem.due <' => $yesterday, 'ActionItem.agent_id' => '1');
    $this->set('past_due', $this->Agent->ActionItem->find('all', array('conditions' => $conditions)));

    $today = date("Y-m-d 00:00:00", strtotime("today"));
    $today_end = date("Y-m-d 23:59:59", strtotime("today"));
    $conditions = array('ActionItem.due >' => $today, 'ActionItem.due <' => $today_end, 'ActionItem.agent_id' => '1');
    $this->set('today', $this->Agent->ActionItem->find('all', array('conditions' => $conditions)));
}

Вышеописанное работает, но я не уверен, что это лучший способидти о я ..

1 Ответ

0 голосов
/ 15 февраля 2012

Было бы место для некоторых улучшений (хотя, как вы говорите, текущий код должен работать, так что это лишь некоторые из моих мыслей).

Прежде всего, если вы собираетесь проверять тольконапример, 00:00:00 и 23:59:59, отбросьте время полностью и просто используйте поле DATE вместо поля DATETIME.Это делает проверку намного проще, так как вам не нужно беспокоиться о времени.(Если времена важны для других частей вашего приложения, то приведенный ниже пример кода должен быть соответствующим образом скорректирован.)

Кроме того, я бы использовал функции DateTime PHP, а не date() с strtotime(), главным образом потому, что это моя привычка, когда я работаю с данными даты / времени.Это потому, что DateTime добавляет много возможностей и гибкости для ваших данных даты и времени без особых хлопот.Что-то вроде этого - то, на что я, вероятно, пошла бы:

public function planner() {

    // Set the DateTime object (defaults to current date/time)
    $today = new DateTime();

    // Overdue actions (everything older than today)
    $overdue = $this->Agent->ActionItem->find('all', array(
        'conditions' => array(
            // Check due against a 'Y-m-d' formatted date of today.
            'ActionItem.due <' => $today->format('Y-m-d'),
            'ActionItem.agent_id' => '1'
        )
    ));

    // Actions due today (or in the future)
    $due = $this->Agent->ActionItem->find('all', array(
        'conditions' => array(
            // Check due against a 'Y-m-d' formatted date of today.
            'ActionItem.due >=' => $today->format('Y-m-d'),
            'ActionItem.agent_id' => '1'
        )
    ));

    // Set the items
    $this->set(compact('overdue', 'due'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...