簡體   English   中英

更改Yii dateField的日期格式

[英]Change date format for Yii dateField

我想以Yii顯示日期選擇器,並以“ YYYY-MM-DD”格式獲取日期,以便可以將其保存在數據庫中。 我使用了以下代碼,但是它以“ MM / DD / YYYY”格式給出日期,這在保存到數據庫中時會引發錯誤,因為這不是日期。

查看代碼:

<div class="row">
    <?php echo $form->labelEx($model,'datecreated'); ?>
    <?php echo $form->dateField($model,'datecreated'); ?>

    <?php echo $form->error($model,'datecreated'); ?>
</div>

模態代碼:

<?php

public function tableName()
{
    return 'admin';
}

public function rules()
{

    return array(
        array('datecreated', 'type', 'type' => 'date', 'message' => '{attribute}: is not a date!','dateFormat'=>'YYYY-MM-DD'),
        array('datecreated','safe', 'on'=>'search'),
    );
}

public function attributeLabels()
{
    return array(
        'datecreated' => 'Birthdate',
    );
}

public function search()
{

    $criteria=new CDbCriteria;
    $criteria->compare('datecreated',$this->datecreated,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}
?>

您可以在模型中使用beforeSave函數:

protected function beforeSave()
{
    // convert when storing in db
    $this->datecreated = date('Y-m-d', strtotime($this->datecreated));

    return parent::beforeSave();
}

如果要以mm / dd / yyyy格式顯示日期,請在模型中使用afterFind函數:

protected function afterFind()
{
    // convert the date back to mm/dd/yyyy format while viewing
    $this->datecreated = date('m/d/Y', strtotime($this->datecreated));

    parent::afterFind();
}

或者,您可以在$model->save();之前的控制器中轉換日期格式$model->save();

public function actionCreate()
{
    $model = new Admin();
    if(isset($_POST['Admin']))
    {
        $model->attributes=$_POST['Admin'];
        $model->datecreated = date('Y-m-d', strtotime($model->datecreated));
        ......
        $model->save();
        ......
    }
    ......
}

您也可以使用CJuiDatePicker小部件:

$this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'model'=>$model,
    'attribute'=>'datecreated',
    // jQuery datepicker plugin options
    'options' => array(
        'showAnim' => 'fold',
        'dateFormat'=>'yyyy-mm-dd',
    ),
    'htmlOptions' => array(
     ),
));

您也可以使用CDateValidator添加驗證規則:

public function rules()
{

    return array(
        array('datecreated', 'date', 'format' => 'yyyy-MM-dd', 'allowEmpty' => false),
        array('datecreated','safe', 'on'=>'search'),
    );
}

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM