2015-09-24 10 views
7

sto usando Kartik DateTimePicker estensioneYii2 View DateTime Format (DMY H: i: s) ma quando Save/aggiornamento nel DB Change formato Ymd H: i: riempire s

<?= $form->field($model, 'Created')->widget(DateTimePicker::classname(),[ 
     'model' => $model, 
     'attribute' => 'Created', 
     'name' => 'Created', 
     'options' => ['placeholder' => 'Select Created'], 
     'pluginOptions' => [ 
      'format' => 'dd-mm-yyyy hh:ii:ss', 
      'todayHighlight' => true 
     ] 
    ]) 
?> 

utente la data di creazione il formato è

DMY H: i: s (come 24-09-2015 11:21:10)

Ma quando record di salvare nel database, allora Creare Data cambio formato per

Ymd H: i: s (come 2015-09-24 11:21:10)

Come posso cambiare il formato della data al momento del salvataggio/aggiornamento dei record di

+0

Se basta cambiare la colonna 'Creato' a 'created_at', il codice sarà più puro. –

risposta

2

Finalmente ho trovato la risposta utilizzando AttributeBehavior.

Nella mia classe del modello ho scrivere il codice comportamenti:

public function behaviors() 
{ 
    return [ 
     [ 
      'class' => AttributeBehavior::className(), 
      'attributes' => [ 
       // update 1 attribute 'created' OR multiple attribute ['created','updated'] 
       ActiveRecord::EVENT_BEFORE_INSERT => ['created','updated'], 
       ActiveRecord::EVENT_BEFORE_UPDATE => 'updated', 
      ], 
      'value' => function ($event) { 
       return date('Y-m-d H:i:s', strtotime($this->Created)); 
      }, 
     ], 
    ]; 
} 

mio modello Classe

namespace frontend\models; 

use Yii; 
use yii\db\ActiveRecord; 
use yii\behaviors\AttributeBehavior; 
/** 
* This is the model class for table "product". 
* 
* @property integer $id 
* @property integer $product_id 
* @property string $product_name 
* @property string $created 
* @property string $updated 
*/ 
class Product extends ActiveRecord 
{ 
    public $csv_file; 

    /** 
    * @inheritdoc 
    */ 
    public static function tableName() 
    { 
     return 'product'; 
    } 

    public function behaviors() 
    { 
     return [ 
      [ 
       'class' => AttributeBehavior::className(), 
       'attributes' => [ 
        ActiveRecord::EVENT_BEFORE_INSERT => ['created','updated'], // update 1 attribute 'created' OR multiple attribute ['created','updated'] 
        ActiveRecord::EVENT_BEFORE_UPDATE => 'updated', // update 1 attribute 'created' OR multiple attribute ['created','updated'] 
       ], 
       'value' => function ($event) { 
        return date('Y-m-d H:i:s', strtotime($this->LastUpdated)); 
       }, 
      ], 
     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      [['id', 'product_id', 'product_name', created, updated], 'required'], 

     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function attributeLabels() 
    { 
     return [ 
      'id' => 'ID', 
      'product_id' => 'Product ID', 
      'product_name' => 'Product Name', 
      'created' => 'Created', 
      'updated' => 'Updated', 
     ]; 
    } 
} 

Se il formato di input è d/m/Y allora si è necessario sostituire il "/" di "-"

come: data di input (creato): 10/09/2015

date('Y-m-d H:i:s', strtotime(str_replace("/","-",$this->created))); 
3

bisogno di aggiungere solo questo codice prima salva/aggiorna il modello nel controller.

come,

// ICU format 
$model->Created = Yii::$app->formatter->asDate($_POST['modelName']['Created'], 'yyyy-MM-dd HH:mm:ss'); // 2014-10-06 15:22:34 

O

// PHP date()-format 
$model->Created = Yii::$app->formatter->asDate($_POST['modelName']['Created'], 'php:Y-m-d H:i:s'); // 2014-10-06 15:22:34 

Per ulteriori informazioni, vedere questo link

+0

C'è qualche altro metodo per cambiare il formato della data? come beforeSave() – Kailas

+0

il mio input è datetime non data – Kailas

+0

Grazie a @gamitg.Soluzione trovata utilizzando i comportamenti – Kailas

0

uso in forma attiva

'clientOptions' => [ 'alias' => 'dd-mm-aaaa' ],

uso in forma attiva

echo MaskedInput::widget([ 
'name' => 'input-31', 
'clientOptions' => ['alias' => 'date']]); 

classe di utilizzo

Classe yii \ Widgets \ MaskedInput

Esempio

<?= $form->field($model, 'date_of_birth')->widget(\yii\widgets\MaskedInput::className(), [ 
    'name' => 'input-31', 
    'clientOptions' => ['alias' => 'dd-mm-yyyy'],  ]) ?>