YII: Как изменить формат даты и времени, отображаемый в представлении - PullRequest
5 голосов
/ 25 июля 2011

Вопрос новичка в Yii: у меня есть модель таблицы в Yii, которая содержит поле datetime.

Я использую CActiveForm для отображения этого поля:

<div class="row">
    <?php echo $form->labelEx($model,'createdon'); ?>
    <?php echo $form->textField($model,'createdon', array('id'=>'createdon')); ?>
    <?php echo $form->error($model,'createdon'); ?>
</div>

, нотекстовое поле отображается в формате datetime из MySQL: гггг-мм-дд чч: мм: сс

Как изменить формат, отображаемый в текстовом поле, на другой формат времени?(может быть, дд / мм / гг или мм / дд / гг или еще)

любая помощь будет оценена.

спасибо!

Ответы [ 3 ]

26 голосов
/ 25 июля 2011

Если вы хотите, чтобы дата сохранялась в одном формате, но отображалась в другом формате (то есть в нескольких видах), рассмотрите возможность ее изменения в модели.

Например:

class Whatever extends CActiveRecord    
{
    protected function afterFind ()
    {
            // convert to display format
        $this->createdon = strtotime ($this->createdon);
        $this->createdon = date ('m/d/Y', $this->createdon);

        parent::afterFind ();
    }

    protected function beforeValidate ()
    {
            // convert to storage format
        $this->createdon = strtotime ($this->createdon);
        $this->createdon = date ('Y-m-d', $this->createdon);

        return parent::beforeValidate ();
    }
}

Какие методы вы переопределяете, зависит от того, чего вы пытаетесь достичь.

Из документов :

  1. Настройка CActiveRecord предоставляет несколько методов-заполнителей. это может быть переопределено в дочерних классах для настройки его рабочего процесса.
    • beforeValidate и afterValidate: они вызываются до и после проверка выполняется.
    • beforeSave и afterSave: они вызываются до и после сохранения экземпляра AR.
    • до удаления и после удаления: они вызываются до и после удаления экземпляра AR.
    • afterConstruct: это вызывается для каждого экземпляра AR, созданного с использованием новый оператор.
    • beforeFind: это вызывается до того, как AR искатель используется для выполнения запроса (например, find (), findAll ()).
    • afterFind: это вызывается после каждого экземпляра AR, созданного в результате запроса.
3 голосов
/ 27 марта 2013

Это сработало для меня:

class SomeClass extends CActiveRecord
{

    protected function afterFind()
    {
        // convert to display format
        $this->my_date_time = DateTime::createFromFormat('Y-m-d H:i:s', $this->my_date_time)->format('d-m-Y');

        parent::afterFind();
    }

    protected function beforeSave()
    {
        // convert to storage format
        $this->my_date_time = DateTime::createFromFormat('d-m-Y', $this->my_date_time)->format('Y-m-d H:i:s');

        return parent::beforeSave();
    }
}
1 голос
/ 25 июля 2011

Все, что вам нужно, это использовать CDateFormatter и его метод format

ИЛИ вы можете использовать нативный PHP для форматирования даты, используя функцию date

Я думаю, что есть много примеров в руководстве PHP по настройкам форматирования (а также объяснение того, что означает каждый модификатор формата), так что не составит труда разобраться, но если у вас возникнут проблемы с Yii CDateFormatter я могу привести несколько примеров.

...