Datetime Yii用错误的输出日期更新输入字段-在哪里控制?

Datetime Yii用错误的输出日期更新输入字段-在哪里控制?,datetime,yii,Datetime,Yii,用户插入一个日期,如:06/11/2012 要插入我使用的数据库,请执行以下操作: protected function beforeSave () { if($this->date <> '') { list($d, $m, $y) = explode('/', $this->date); $mk=mktime(0, 0, 0, $m, $d, $y); $this->date = date ('Y-m-d', $mk); }

用户插入一个日期,如:06/11/2012

要插入我使用的数据库,请执行以下操作:

protected function beforeSave ()
{
  if($this->date <> '')
  { 
    list($d, $m, $y) = explode('/', $this->date);
    $mk=mktime(0, 0, 0, $m, $d, $y);
    $this->date = date ('Y-m-d', $mk);
  }

   return parent::beforeSave ();
} 
然后我正确地使用日期格式,得到了日期和月份

yii::app()->dateFormatter->format('dd', $date);

yii::app()->dateFormatter->format('MMMM', $date);
所有这些似乎都很有效。 然而,在我的更新表格中,我得到了如下日期:

“20/12/1106”

在表单输入字段中,日期应转换为:

dd/mm/yyyy
当显示时

在我的模型规则中,我有:

array('date', 'type', 'type' => 'date', 'message' => '{attribute}: Invalid Date!', 'dateFormat' => 'dd/mm/yyyy'),
我们在哪里可以控制Yii上的日期,以便在我们的输入字段上显示为dd/mm/yyyy?

我已经这样做了,但当然,若我们以后有其他控制器,然后更新,我们必须改变这一点。这似乎不是一个好办法(

受保护的函数afterFind()
{
如果(Yii::app()->controller->action->id=='update')
{
如果($this->date“”)
{
Yii::app()->dateFormatter->formatDatetime($this->date,'short');
}
返回父::afterFind();
} 
}

在呈现更新表单之前,您可以做一些锻炼。这应该可以,但不需要测试 在
$this->render(..);


但如果您需要保留此格式,则应避免在每个位置转换日期。只需将日期以所需格式直接保存在数据库中即可。

我已收到建议(所有这些互联网文章)为了不保存其他格式的日期,然后yyyy-mm-dd-这是数据库接受的格式,没有麻烦,没有混乱。如果我们需要以不同的方式显示它,我们会在应用程序上转换它。日期或日期时间通常是这里的字段。我会尝试一下。3分钟。好吧,你说的是正确的,但我确信足够简单的使用数据库不会重新出现t值:)您可以设置类型varchar,这将成为唯一的存储,在QURIE中可能没有帮助。我已经使用afterFind()完成了设置。但我认为这种做法相当粗鲁。你能检查一下吗。
array('date', 'type', 'type' => 'date', 'message' => '{attribute}: Invalid Date!', 'dateFormat' => 'dd/mm/yyyy'),
protected function afterFind ()
{
 if(Yii::app()->controller->action->id == 'update')
 {
  if($this->date <> '')
  {
   Yii::app()->dateFormatter->formatDatetime($this->date,'short');
  }

  return parent::afterFind ();          
 } 
}
$model->date = assign your required format here;