Berikut script yang telah dimodifikasi
<?php /* * DateTimeI18NBehavior * Automatically converts date and datetime fields to I18N format * * Author: Ricardo Grana <rickgrana@yahoo.com.br>, <ricardo.grana@pmm.am.gov.br> * Version: 1.1 * Requires: Yii 1.0.9 version */ class DateTimeI18NBehavior extends CActiveRecordBehavior { public $dateOutcomeFormat = 'Y-m-d'; //Format pengisian tanggal di My-SQL yang ditentukan public $dateTimeOutcomeFormat = 'Y-m-d H:i:s'; public $dateIncomeFormat = 'yyyy-MM-dd'; public $dateTimeIncomeFormat = 'yyyy-MM-dd hh:mm:ss'; public function beforeSave($event){ //search for date/datetime columns. Convert it to pure PHP date format foreach($event->sender->tableSchema->columns as $columnName => $column){ if (($column->dbType != 'date') and ($column->dbType != 'datetime')) continue; if (!strlen($event->sender->$columnName)){ $event->sender->$columnName = null; continue; } if (($column->dbType == 'date')) { $event->sender->$columnName = date($this->dateOutcomeFormat, CDateTimeParser::parse($event->sender->$columnName, 'dd-MM-yyyy')); } else { $event->sender->$columnName = date($this->dateTimeOutcomeFormat, CDateTimeParser::parse($event->sender->$columnName, strtr(Yii::app()->locale->dateTimeFormat, array("{0}" => Yii::app()->locale->timeFormat, "{1}" => Yii::app()->locale->dateFormat)))); } } return true; } public function afterFind($event){ foreach($event->sender->tableSchema->columns as $columnName => $column){ if (($column->dbType != 'date') and ($column->dbType != 'datetime')) continue; if (!strlen($event->sender->$columnName)){ $event->sender->$columnName = null; continue; } if ($column->dbType == 'date'){ $event->sender->$columnName = Yii::app()->dateFormatter->format('dd-MM-yyyy', CDateTimeParser::parse($event->sender->$columnName, $this->dateIncomeFormat)); }else{ $event->sender->$columnName = Yii::app()->dateFormatter->formatDateTime( CDateTimeParser::parse($event->sender->$columnName, $this->dateTimeIncomeFormat), 'medium', 'medium'); } } return true; } }simpan dengan nama DateTimeI18NBehavior.php dan simpan di folder extensions. Bagaimana cara menggunakannya ? Anda buka model yang hendak anda ganti format tanggalnya, kemudian tambahkan script berikut
public function behaviors() { return array( 'datetimeI18NBehavior'=>array( 'class'=>'application.extensions.DateTimeI18NBehavior' ), ); }atau jika modelnya banyak, maka akan lebih mudah jika anda membuat component baru dengan nama terserah anda. sebagai contoh saya membuat dengan nama EActiveRecord.php kemudian isi dengan script berikut
<?php class EActiveRecord extends CActiveRecord { public static function model($className=__CLASS__) { return parent::model($className); } public function behaviors() { return array( 'datetimeI18NBehavior'=>array( 'class'=>'application.extensions.DateTimeI18NBehavior' ), ); } }dan pada model yang ingin di ubah format tanggalnya, silahkan ganti CActiveRecord menjadi EActiveRecord. Selesai :D
PERTAMAX... haha
BalasHapusThank you for u shareing
Tapi ada masalah pada saat update data, format tanggal kembali ke settingan default 1 Jan 1970, ini kenapa ya bisa kejadian seperti itu
BalasHapus