我一直在寻找同样的东西,但解决方案略有不同。我主要在表单页面上寻找将日期显示为 DD-MM-YYYY 并在数据库中保存为 YYYY-MM-DD。
无论更改 CJuiDatePicker 上的 dateFormat 选项,甚至尝试使用 altFormat(使用 altField 以及显然这是必要的)选项,日期都没有以所需的格式显示,如果我要更改日期,则格式将是正确显示。
所以我在组件中创建了一个自定义类并创建了两种方法,一种将日期重新格式化为 DD-MM-YYYY 格式,另一种将日期格式化为正确的 YYYY-MM-DD 以保存在数据库中。这是自定义类(该文件称为 Custom.php 并保存在组件中。)
class Custom
{
/*
**This method formats the date to be human readble ie 21-06-2013
*/
public function reformatDate($date)
{
if($date == '0000-00-00')
{
$newDate = '00-00-0000';
return $newDate;
}
elseif($date == '')
{
return $date;
}
else
{
$newDate = date("d-m-Y", strtotime($date));
return $newDate;
}
}
/*
**This method formats the date to the correct format according to the database
*/
public function formatDate($date)
{
if($date == '00-00-0000')
{
$newDate = '0000-00-00';
return $newDate;
}
elseif($date == '')
{
return $date;
}
else
{
$newDate = date("Y-m-d", strtotime($date));
return $newDate;
}
}
}
现在我有了将日期更改为正确格式的方法。在我在顶部声明的_form 页面上,在表单的启动下。
$model->date_required = Custom::reformatDate($model->date_required);
$model->date_created = Custom::reformatDate($model->date_created);
$model->date_completed = Custom::reformatDate($model->date_completed);
现在,这会导致日期正确显示,无论是查看 _form 页面还是通过 CJuiDatePicker 更改日期,因为我仍然使用 dateFormat 选项在日期更改时显示正确的格式。
最后,我在控制器的创建和更新操作中添加了以下内容。
if(isset($_POST['Tickets']))
{
$model->attributes=$_POST['Tickets'];
$model->date_created = Custom::formatDate($model->date_created);
$model->date_required = Custom::formatDate($_POST['Tickets']['date_required']);
$model->date_completed = Custom::formatDate($_POST['Tickets']['date_completed']);
if($model->save())
因此,在将数据保存回数据库之前,我将日期格式化为正确的格式并将其弹出到数据库中。
我不是专家,只进入 Yii 几个月,进入 PHP 大约 9 个月。我知道在保存方法之前和之后有各种各样的方法,这可能不是最好的方法,事实上,如果有更好的方法,我会全力以赴。但现在这对我有用。希望这可以帮助某人。
/* 小更新 */ 在与一位从事这项工作大约十年的同事交谈之后。他说删除我在表单启动下放置在表单页面上的代码并将其移动到控制器中会更干净,因此例如我的更新方法看起来像这样
public function actionUpdate($id)
{
$model=$this->loadModel($id);
$model->date_required = Custom::reformatDate($model->date_required);
$model->date_created = Custom::reformatDate($model->date_created);
$model->date_completed = Custom::reformatDate($model->date_completed);
因此,不是在表单页面上重新格式化日期,而是直接在 loadModel 之后完成,从而保持视图更清晰。