1

ユーザーは、2012 年 6 月 11 日のような日付を挿入します。

私が使用するデータベースに挿入するには:

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 ();
} 

質問 1) より短いアプローチはありませんか?

とにかく、それは機能するので、データベースの日付型フィールドから取得した文字列形式の日付があります。

$date = '2012-11-06'

次に、日付形式を正しく使用し、日と月を取得します

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

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

これはすべてうまくいくようです。ただし、更新フォームでは、次のような日付を取得します。

「1106/12/20」

フォーム入力フィールドで、日付を次のように変換する必要があります。

dd/mm/yyyy

表示されたとき。

私のモデルルールでは、私が持っているものは次のとおりです。

array('date', 'type', 'type' => 'date', 'message' => '{attribute}: Invalid Date!', 'dateFormat' => 'dd/mm/yyyy'),

日付の入力フィールドで dd/mm/yyyy として表示されるように、Yii でこれをどこで制御できますか?

私はこれを行いましたが、もちろん、後で他のコントローラーを更新した場合は、これを変更する必要があります。これは良いアプローチではないようです。:(

protected function afterFind ()
{
 if(Yii::app()->controller->action->id == 'update')
 {
  if($this->date <> '')
  {
   Yii::app()->dateFormatter->formatDatetime($this->date,'short');
  }

  return parent::afterFind ();          
 } 
}
4

1 に答える 1

0

更新フォームをレンダリングする前に、少しワークアウトを行うことができます。これは機能するはずですが、アクションの更新前にテストされていません $this->render(....);

$model->date = assign your required format here;

ただし、この形式を維持する必要がある場合は、すべての場所で日付を変換しないようにする必要があります。データベースに必要な形式で日付を直接保存するだけです。

于 2012-07-04T15:30:20.340 に答える