Tags

, , , , ,

Salah satu kasus populer berikutnya adalah bagaimana merubah format tanggal dari format database ke bentuk yang lebih mudah untuk dibaca. Kita tahu, umumnya dbms yang ada(postgre, mysql, sqlite) menyimpan tanggal dalam format yyyy-mm-dd sedangkan kita mungkin lebih terbiasa membaca tangal dalam format dd-mm-yyyy.
Screenshot from 2016-02-07 08:11:41
Untuk itu kita perlu untuk membuat kode yang akan mengkonversi format tanggal tersebut. Kalau hanya dipakai sekali, mungkin tidak apa-apa kita buat sendiri. Tetapi kalau dipakai di banyak tempat, akan cukup praktis kalau memakai kode yang sudah ada.

Ekstensi yang akan kita pakai untuk masalah ini adalah mdmsoft/yii2-format-converter. Ada beberapa behavior di sana, tetapi kita fokus ke DateConverter saja yaitu yang bertanggung jawab mengkonversi format tanggal. Cara installnya seperti biasa, kita bisa menggunakan composer atau dengan download manual.

Cara penggunaan

Tambahkan behavior DateConverter ke dalam model kita. Caranya

public function behaviors()
{
    return [
        [
            'class' => 'mdm\converter\DateConverter',
            'type' => 'date', // 'date', 'time', 'datetime'
            'logicalFormat' => 'php:d/m/Y', // default to locale format
            'physicalFormat' => 'php:Y-m-d', // database level format, default to 'Y-m-d'
            'attributes' => [
                'local_date' => 'date', 
            ]
        ],
        ...
    ]
}

logicalFormat adalah format yang ingin kita lihat. Sedangkan physicalFormat adalah format yang disimpan di database. Defaultnya sudah Y-m-d, jadi kalu dikosongi sudah akan kompatibel dengan mysql dan postgre.
Screenshot from 2016-02-07 08:10:12
Kalau sudah selesai dengan Model-nya. Di view kita bisa menggunakan JUI DatePicker untuk input tangal.

echo $form->field($model, 'local_date')
    ->widget('yii\jui\DatePicker', [
        'options' => ['class' => 'form-control', 'style' => 'width:50%'],
        'dateFormat' => 'php:d/m/Y', 
]);

Yang harus diperhatikan. Attribute yang kita pakai adalah local_date alih-alih menggunakan date. Juga, dateFormat di JUI harus sama dengan logicalFormat di behavior.

Advertisements