Yii:不同格式在DB和HTML输入字段中?

时间:2013-05-05 16:44:03

标签: yii

我有一个带有日期字段的MySQL数据库,格式如" 2013-04-05"。

我还有一个带有文本输入的CActiveForm,它接受像" 05/10 / 2013"这样的值。

在加载和提交表单时,在这些格式之间进行转换的正确方法是什么?我需要覆盖哪种方法?

2 个答案:

答案 0 :(得分:4)

一个常见的问题,很多解决方案,这里很简单:

使用虚拟属性,例如在你的模型中:

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

您还应该阅读:

答案 1 :(得分:0)

如果日期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]));
}