валидатор сравнения дат

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

валидатор сравнения дат

Сообщение RusAlex »

Сейчас реализовал сам, но неплохо было бы иметь такой валидатор из коробки. Валидатор будет проверять дату введенную пользователем, с выражением для, strtotime.

мой валидатор выглядит так:

Код: Выделить всё

        protected function validateAttribute($object,$attribute)
        {

            $a = DateTime::createFromFormat(Yii::app()->locale->getDateFormat('validator'),$object->$attribute);

            //Yii::log(print_r($a,true),'custom');
            $b = new DateTime($this->pattern);
            //Yii::log(print_r($b,true),'custom');
            if($a instanceof DateTime)
                $d = $b->diff($a);

            //Yii::log(print_r($d,true),'custom');
            if(isset($d) 
                && $d->invert!=0) {
                    $message=$this->message!==null?$this->message:Yii::t('common','{attribute} must be greater ' . $b->format(Yii::app()->locale->getDateFormat('validator')));
                        $this->addError($object,$attribute,$message);
            }
            else if(!isset($d))
                        {
                            $message=$this->message!==null?$this->message:Yii::t('yii','{attribute} bad format');
                        $this->addError($object,$attribute,$message);
                        }
            return;
        }
 
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: валидатор сравнения дат

Сообщение Ekstazi »

А чем CTypeValidator не подошел ?
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: валидатор сравнения дат

Сообщение RusAlex »

а как CTypeValidator может сравнивать даты ? Он может только проверить формат. Да и то для дат советуют с версии 1.1.7 использовать CDateValidator.

Может быть я конечно не очень подробно описал что делает валидатор. Он проверяет является ли дата введенная пользователем, больше заданной даты.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: валидатор сравнения дат

Сообщение yiijeka »

Появилось ли что-нибудь к 1.1.13, решающую эту задачу?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: валидатор сравнения дат

Сообщение samdark »

Вроде нет.
liff
Сообщения: 14
Зарегистрирован: 2011.12.01, 02:15

Re: валидатор сравнения дат

Сообщение liff »

Может стоит добавить данную фичу @Sam? Как вариант - аналог условий max,min,is для string значений + формат сравнения. Сам сталкиваюсь с данным вопросом, но редко и решаю ср-вами php. Можно пул кинуть на это, стоит ли?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: валидатор сравнения дат

Сообщение samdark »

Даты и время хранят сильно по-разному: timespamp, строки, разные нативные форматы для разных баз. Поэтому сделать в ядре поддержку всего, боюсь, не выйдет. Если есть на эту тему идеи, предлагайте.
liff
Сообщения: 14
Зарегистрирован: 2011.12.01, 02:15

Re: валидатор сравнения дат

Сообщение liff »

Sam Dark писал(а):Даты и время хранят сильно по-разному: timespamp, строки, разные нативные форматы для разных баз. Поэтому сделать в ядре поддержку всего, боюсь, не выйдет. Если есть на эту тему идеи, предлагайте.
Ну собственно поэтому и предлагал как параметр валидатора format даты - именно даты,хотя щас захотят дата-время.
Со своей стороны могу кинуnь вариант для pgsql & mysql

С этого начать по-крайней мере стоит, потом думаю подтянутся). Я оптимист.

P.S расширение думаю будет довольно не-то, просто. У меня то есть, но хочется оформить в код фрейма).
liff
Сообщения: 14
Зарегистрирован: 2011.12.01, 02:15

Re: валидатор сравнения дат

Сообщение liff »

P.P.S насчет форматов бд - есть же абстракция для бд, Думаю и Date сделаем общими усилиями.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: валидатор сравнения дат

Сообщение SiZE »

Тот кто использует локализацию в Й может использовать это. Выдернул из поведения, но суть думаю ясна будет:

Код: Выделить всё

            if ( $column->dbType == 'datetime' ) {
                $timestamp = CDateTimeParser::parse( $this->owner->$columnName, strtr(
                    Yii::app()->locale->dateTimeFormat,
                    array(
                        "{0}" => Yii::app()->locale->timeFormat,
                        "{1}" => Yii::app()->locale->dateFormat
                    )
                ));
                // Для типа поля datetime дата может быть передана в формате date
                if ( $timestamp ) {
                    $this->owner->$columnName = date( 'Y-m-d H:i:s', $timestamp );
                } else {
                    $this->owner->$columnName = date( 'Y-m-d', CDateTimeParser::parse( $this->owner->$columnName, Yii::app()->locale->dateFormat ) );
                }
            } else if ( $column->dbType == 'date' ) {
                $this->owner->$columnName = date( 'Y-m-d', CDateTimeParser::parse( $this->owner->$columnName, Yii::app()->locale->dateFormat ) );
            } 
Ответить