如果您只是为了输入目的将日期分成三部分,例如,另一种选择可能是使用CJuiDatePicker允许用户选择完整日期;
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'name'=>'birthday',
'model'=>$model,
'attribute'=>'birthday',
'options'=>array(
'showAnim'=>'fold',
),
'htmlOptions'=>array(
'style'=>'height:20px;'
),
));
然后,您可以将结果格式化为您想要的格式以插入到您的数据库中,例如;
...
public function actionCreate()
{
$model=new Model;
if(isset($_POST['Model']))
{
$model->attributes=$_POST['Model'];
$model->save();
...
}
...
}
...
或更新;
...
public function actionUpdate($id)
{
$model=$this->loadModel($id);
if(isset($_POST['Model']))
{
$model->attributes=$_POST['Model'];
$model->save();
...
}
...
}
...
为了将日期保存为正确的格式(即从用户友好的格式将 CJuiDatePicker dd/mm/yyyy 转换为您的 sql 表格式,很可能类似于 YYYY-mm-dd)然后您可以在保存模型之前进行转换, 像这样;
public function beforeSave() {
$this->birthday=date('Y-m-d',strtotime($this->birthday); // Or however you want to insert it
return parent::beforeSave();
}
如果您随后需要特定的日/月/年在应用程序的其他位置显示,您可以像在示例中一样将它们设置为属性(public $birthday_day;
等),这完全没有问题。或者,如果您不想在每次调用模型实例时转换日期,您可以为它们设置一个属性,如下所示;
public function getBirthday($part) {
switch($part)
{
case 'day':
return date('j', strtotime($this->birthday));
break;
case 'month':
return date('n', strtotime($this->birthday));
break;
case 'year':
return date('Y', strtotime($this->birthday));
break;
default:
return date('d/m/Y', strtotime($this->birthday));
break;
}
}
如果你想要这一天,只需打电话$model->getBirthday('day');
……或者无论如何你想这样做,最后一点更个人喜好!