0

我在 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));
}

问题:

保存在数据库表中的值为 0000-00-00 00:00:00 它不采用日期时间选择器的值。

编辑:

模型验证

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'),
);
4

1 回答 1

0

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

  • 在您的小部件中: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可以在小部件中使用的虚拟属性。不要忘记在模型验证规则中添加此属性。

http://www.yiiframework.com/doc/guide/1.1/fr/topics.i18n#date-and-time-formatting

于 2013-04-18T09:11:39.567 回答