Yii EJuiDateTimePicker值未保存到数据库

Yii EJuiDateTimePicker值未保存到数据库,yii,yii-extensions,Yii,Yii Extensions,我正在yii框架中为日期和时间选择器使用EJuiDateTimePicker扩展。我已经下载了EJuiDateTimePicker并将其置于protected\extensions\jui下 视图: $this->widget( 'ext.jui.EJuiDateTimePicker', array( 'model' => $model,

我正在yii框架中为日期和时间选择器使用EJuiDateTimePicker扩展。我已经下载了EJuiDateTimePicker并将其置于protected\extensions\jui下

视图:

$this->widget(
                    'ext.jui.EJuiDateTimePicker',
                    array(
                        'model'     => $model,
                        'attribute' => 'todo_datetime',
                        'value' => $model->todo_datetime,
                        'options'   => array(
                            'dateFormat' => 'dd-mm-yy',
                            'timeFormat' => 'hh:mm:ss',//'hh:mm tt' default
                        ),
                    )
                );
if(isset($_POST['Todo']))
{
    $model->attributes=$_POST['Todo'];
                if($model->save())
        $this->redirect(array('view','id'=>$model->id));
}
行动:

$this->widget(
                    'ext.jui.EJuiDateTimePicker',
                    array(
                        'model'     => $model,
                        'attribute' => 'todo_datetime',
                        'value' => $model->todo_datetime,
                        'options'   => array(
                            'dateFormat' => 'dd-mm-yy',
                            'timeFormat' => 'hh:mm:ss',//'hh:mm tt' default
                        ),
                    )
                );
if(isset($_POST['Todo']))
{
    $model->attributes=$_POST['Todo'];
                if($model->save())
        $this->redirect(array('view','id'=>$model->id));
}
问题:

$this->widget(
                    'ext.jui.EJuiDateTimePicker',
                    array(
                        'model'     => $model,
                        'attribute' => 'todo_datetime',
                        'value' => $model->todo_datetime,
                        'options'   => array(
                            'dateFormat' => 'dd-mm-yy',
                            'timeFormat' => 'hh:mm:ss',//'hh:mm tt' default
                        ),
                    )
                );
if(isset($_POST['Todo']))
{
    $model->attributes=$_POST['Todo'];
                if($model->save())
        $this->redirect(array('view','id'=>$model->id));
}
保存在数据库表中的值为0000-00-00 00:00:00。它不采用日期时间选择器的值

编辑:

$this->widget(
                    'ext.jui.EJuiDateTimePicker',
                    array(
                        'model'     => $model,
                        'attribute' => 'todo_datetime',
                        'value' => $model->todo_datetime,
                        'options'   => array(
                            'dateFormat' => 'dd-mm-yy',
                            'timeFormat' => 'hh:mm:ss',//'hh:mm tt' default
                        ),
                    )
                );
if(isset($_POST['Todo']))
{
    $model->attributes=$_POST['Todo'];
                if($model->save())
        $this->redirect(array('view','id'=>$model->id));
}
模型验证

return array(
    array('todo_text, todo_datetime, priority, status', 'required'),
    array('priority, status', 'numerical', 'integerOnly'=>true),
    // The following rule is used by search().
    // Please remove those attributes that should not be searched.
    array('todo_text, todo_datetime, added_on, priority, status', 'safe', 'on'=>'search'),
);

好吧,没什么奇怪的,您应该在小部件和数据库中使用相同的日期格式,实际上:

  • 在您的小部件中:
    dd-mm-yy hh:mm:ss
  • 在数据库中:
    yyyy-mm-dd hh:mm:ss
您可以使用getter/setter或beforeSave/afterFind处理此常见问题,下面是一个使用getter/setter的简单的示例:

在您的型号中

public $dateTimeIncomeFormat = 'yyyy-MM-dd H:mm:ss';
public $dateTimeOutcomeFormat = 'dd-MM-yy H:mm:ss';

public function getDateTime()
{
    return Yii::app()->dateFormatter->format($this->dateTimeOutcomeFormat, CDateTimeParser::parse($this->todo_datetime, $this->dateTimeIncomeFormat));
}

public function setDateTime($datetime)
{
    $this->todo_datetime = Yii::app()->dateFormatter->format($this->dateTimeIncomeFormat, CDateTimeParser::parse($datetime, $this->dateTimeOutcomeFormat));
}
这将创建一个
dateTime
虚拟属性,您可以在小部件中使用该属性。 不要忘记在模型验证规则中添加此属性


向我们展示您的模型验证规则以及数据库中的日期字段(日期时间、时间戳等)?我将日期时间作为数据类型我在小部件选项“选项”=>数组中有正确的日期时间格式('dateFormat'=>'yy-mm-dd','timeFormat'=>'h:mm:ss',//'hh:mm-tt'默认值),