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

Yii:DB和HTML输入字段中的格式不同?,yii,Yii,我有一个MySQL数据库,带有日期字段,格式如“2013-04-05” 我还有一个带有文本输入的CActiveForm,它接受诸如“05/10/2013”之类的值 加载和提交表单时,如何正确转换这些格式?我需要覆盖哪种方法?如果日期2013-04-05的格式为yyyy-mm-dd,并且2013年10月5日的格式为dd-mm-yyyy,您可以使用: 2013-04-05=>05/10/2013 $date = implode('/', array_reverse(explode('-', '201

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

我还有一个带有文本输入的CActiveForm,它接受诸如“05/10/2013”之类的值


加载和提交表单时,如何正确转换这些格式?我需要覆盖哪种方法?

如果日期
2013-04-05
的格式为yyyy-mm-dd,并且
2013年10月5日
的格式为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]));
}

如果日期
2013-04-05
格式为yyyy-mm-dd,且
2013年10月05日
格式为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]));
}

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

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

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
您还应该阅读以下内容:


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

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

      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
      您还应该阅读以下内容:


      我问的是使用哪种方法进行转换,而不是如何使用explode()(我已经知道的)为什么不在验证表单的控制器方法中使用它,或者在保存前的模型()中使用它?我问的是使用哪种方法进行转换,而不是如何使用explode()(我已经知道的)为什么不在验证表单的控制器方法中或在模型beforeSave()中使用它?