我有一个 MySQL 数据库,其日期字段格式为“2013-04-05”。
我也有带有文本输入的 CActiveForm,它接受像“05/10/2013”这样的值。
加载和提交表单时在这些格式之间进行转换的正确方法是什么?我需要覆盖哪种方法?
我有一个 MySQL 数据库,其日期字段格式为“2013-04-05”。
我也有带有文本输入的 CActiveForm,它接受像“05/10/2013”这样的值。
加载和提交表单时在这些格式之间进行转换的正确方法是什么?我需要覆盖哪种方法?
一个常见的问题,解决方法很多,这里简单说一个:
使用虚拟属性,例如在您的模型中:
public $dateIncomeFormat = 'yyyy-MM-dd';
public $dateOutcomeFormat = 'dd/MM/yyyy';
// get date (FR means french)
public function getDateFR()
{
return Yii::app()->dateFormatter->format($this->dateOutcomeFormat, CDateTimeParser::parse($this->date, $this->dateIncomeFormat));
}
// set dateFR
public function setDateFR($date)
{
$this->date = Yii::app()->dateFormatter->format($this->dateIncomeFormat, CDateTimeParser::parse($date, $this->dateOutcomeFormat));
}
你应该:
dateFR
在模型的规则中声明,dateFR
在您的表单中使用而不是date
.您还应该阅读以下内容:
如果日期2013-04-05
的格式为 yyyy-mm-dd并且05/10/2013
格式为 dd-mm-yyyy,您可以使用:
2013-04-05
=>05/10/2013
$date = implode('/', array_reverse(explode('-', '2013-04-05')));
05/10/2013
=>2013-04-05
$date = implode('-', array_reverse(explode('/', '05/10/2013')));
如果您有其他日期格式 - 这里有更灵活的功能
// if $date = '05/10/2013' (mm-dd-yyyy) e.g.
function dateToMysql($date, $format = 'd-m-Y') {
$date = explode('/',$date);
return date($format, strtotime($date[1]."-".$date[0]."-".$date[2]));
}
// if $date = '2013-04-05' (yyyy-mm-dd) e.g.
function mysqlToDate($date, $format = 'm/d/Y') {
$date = explode('-',$date);
return date($format, strtotime($date[0]."-".$date[1]."-".$date[2]));
}