Mengatasi Fungsi Date yang Error di PHP Yii karena Timezone

Terkait tutorial sebelumnya yang tentang membuat dropdown tahun dengan rentang tertentu, ternyata ada masalah ketika aplikasi tersebut dijalankan di server lain.

Ada error atau peringatan yang muncul terkait fungsi date() dalam kode dalam tutorial sebelumnya. Di situ disebutkan bahwa tidak aman jika mengandalkan pengaturan timezone pada sistem yang berjalan, dan kita harus mengeset timezone dari fungsi date yang digunakan.

Mengatasi Fungsi Date yang Error di PHP Yii karena Timezone

Berikut ini adalah warning atau error yang muncul ketika Controller yii di jalankan:

date() [<a href=’function.date’>function.date</a>]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Jakarta’ for ‘WIT/7.0/no DST’ instead

Nah, dari peringatan di atas, tentunya kita sudah tahu apa yang harus kita lakukan. Ya, kita harus mengeset timezone dalam kode di aplikasi kita. Bagaimana caranya? cukup dengan menambahkan baris berikut:

date_default_timezone_set('Asia/Jakarta');

Dalam kode di atas kita mengeset default timezone dengan waktu Jakarta. Untuk melihat daftar timezone, bisa di lihat di dokumentasi PHP berikut https://php.net/manual/en/timezones.php

Jika digabungkan dengan kode pada tutorial sebelumnya, maka menjadi seperti ini untuk membuat array nya:

<?php
    date_default_timezone_set('Asia/Jakarta');
    $tahunSekarang = date("Y");
    $tahunAwal = $tahunSekarang - 20;
    $tahunAkhir = $tahunSekarang;
    $arrayTahun = array();

    foreach (range($tahunAwal, $tahunAkhir) as $n) {
        $arrayTahun[$n] = $n;
    }

    $arrayTahun = array_reverse($arrayTahun, true);
?>

Dan ini untuk menampilkan dropdownnya di Yii form:

<tr>
    <td><?php echo $form->labelEx($model, 'tahun'); ?></td>
    <td><?php echo $form->dropDownList($model, 'tahun', $arrayTahun); ?></td>
    <td><?php echo $form->error($model, 'tahun'); ?></td>
</tr>

Seharusnya sekarang peringatan akan default timezone sudah tidak muncul lagi.

Sekian tutorial Yii singkat ini, semoga bermanfaat.

Leave a Comment