Дата плюс 30 дней проверки - PullRequest
1 голос
/ 06 февраля 2012

Я пытаюсь написать правило валидации в Yii, но не могу сравнить дату с работой. Поиск сообщения об ошибке, если End не больше, чем 30 дней назад Start.

public function checkDate($attribute,$params)
    {
        $duration = strtotime(date('Y-m-d', strtotime($this->Start)) . ' +30 days');
        if ($this->End < $duration) 
                $this->addError('End','30 days or more!');
    }

При этом каждый вход выдает сообщение об ошибке. Я использую MySql db, а Start и End имеют формат date

EDIT: Учитывая ввод в ответах ниже, я попытался

Теперь это даже не отобразит страницу.

    $startDate = $this->Start;
    $endDate = $this->End;
    $interval = $startDate->diff($endDate);
    if ($interval < 30) 
                $this->addError('End','30 days or more!');

и

Это дает ошибку в 100% случаев.

$duration = date('Y-m-d', strtotime($this->Start . '+ 30 days'));
if ($this->End < $duration) 
    $this->addError('End','30 days or more!');

Ответы [ 4 ]

4 голосов
/ 06 февраля 2012

, если вы сравниваете $duration с $this->END (который поступает прямо из базы данных), вам нужно поставить date('Y-m-d', $duration) перед проверкой по $this->END, что вы сравниваете strtotime с date('Y-m-d') гдеяблоки и апельсины

изменение $ duration = strtotime (date ('Ym-d', strtotime ($ this-> Start)). '+30 дней');до $ duration = date ('Ym-d', strtotime ($ this-> START. '+ 30 days'));

и ваш скрипт должен работать

надеюсь, это поможет

2 голосов
/ 06 февраля 2012
#source: http://www.php.net/manual/en/datetime.diff.php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
0 голосов
/ 07 февраля 2012

Я уже использую это следующим образом:

public function rules()
{
    return array(
    ...
        array('dateX','timeoutSomething'),
    ...
    );
}


public function timeoutSomething($dateX){
    // If you try to modify the model after 300 seconds the error arise
    if((strtotime($this->dateX)+300) < time()){
        $this->addError($dateX,"Timeout exceed");
    }
}
0 голосов
/ 06 февраля 2012

Возможно, вы захотите использовать DateTime-> diff и проверить, не меньше ли разницы дней 30, а затем вызвать ошибку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...