Memahami Zona Waktu (Timezone) dan Selisih Waktu Pada PHP

Pada kesempatan ini, kita akan membahas mengenai zona waktu (timezone) pada PHP. Konsekuensi dari zona waktu ini adalah terjadinya perbedaan waktu antara waktu pada komputer server dengan waktu yang digenerate oleh PHP. Artikel ini juga akan membahas bagaimana mengatasi permasalahan tersebut (selisih waktu pada PHP).

I. Timezone / Zona Waktu Pada PHP

Ketika membuat aplikasi menggunakan PHP, kita pasti akan mengalami perbedaan waktu antara komputer server dengan waktu yang digenerate oleh php, terutama ketika menjalankan fungsi terkait waktu seperti date(). Hal ini dikarenakan perbedaan penggunaan timezone (zona waktu)

Zona Waktu pada PHP secara default didefinisikan pada file konfigurasi php.ini. untuk melihat zona waktu yang sedang digunakan, buka file php.ini, pada xampp, file ini berada di direktori xampp/php. selanjutnya, cari kata-kata timezone.

Pada php yang saya gunakan, zona waktunya adalah sebagai berikut:

Mengatasi Selisish Waktu Pada PHP

Default timezone juga dapat dilihat  dengan menjalankan fungsi phpinfo()

Timezone Atau Zona Waktu Pada PHP

Pada gambar diatas, zona waktu yang digunakan adalah  Europe/Berlin yang artinya GMT + 1, sehingga jika saya jalankan fungsi date(), maka akan terjadi perbedaan waktu 6 jam, karena zona waktu kita adalah GMT + 7

<?php
echo date('d-m-Y H:i:s'); // Hasil: 17-01-2017 01:56:59

Script diatas dijalankan pukul 07:56:59, sehingga karena zona waktu GMT + 1, waktu yang dihasilkan adalah 01:56:59

Cara lain untuk mengetahui zona waktu yang sedang digunakan adalah menggunakan fungsi date_default_timezone_get()

<?php
echo date_default_timezone_get(); // Output: Europe/Berlin

II. Mengatasi Selisih Waktu Pada PHP

Untuk mengatasi perbedaan waktu tersebut, terdapat beberapa cara yang dapat dilakukan, diantaranya adalah menggunakan fungsi tertentu, mengubah setting pada php.ini, dan mengubah waktu secara manual.

1 Mengubah Zona Waktu Pada PHP Dengan Fungsi Tertentu

Pada PHP, fungsi yang digunakan untuk mengubah zona waktu adalah fungsi date_default_timezone_set() dan ini_set().

Contoh penggunaan fungsi  date_default_timezone_set():

<?php
echo 'Default Timezone: ' . date('d-m-Y H:i:s') . '</br>';
date_default_timezone_set('Asia/Jakarta');
echo 'Indonesian Timezone: ' . date('d-m-Y H:i:s');

Jika script tersebut dijalankan, hasil yang saya peroleh adalah:

Default Timezone: 17-01-2017 02:06:09
Indonesian Timezone: 17-01-2017 08:06:09

Sedangkan contoh penggunaan  ini_set()  adalah sebagai berikut:

<?php
ini_set('date.timezone', 'Asia/Jakarta');
echo 'Indonesian Timezone: ' . date('d-m-Y H:i:s');

Penggunaan kedua cara diatas hanya akan berpengaruh pada script yang berada setelah fungsi tersebut di definisikan. Sehingga, untuk mengubah zona waktu secara global, kita harus menulis fungsi tersebut di bagian paling awal dari script PHP kita.

2 Mengubah Zona Waktu Pada PHP Dengan Mengubah File Konfigurasi

Penggunaan fungsi  date_default_timezone_set()  dan ini_set() hanya akan berpengaruh pada script setelah fungsi tersebut dipanggil, meskipun kita letakkan diawal script, pada sistem yang kompleks, bisa jadi terdapat script yang tidak terpengaruh.

Untuk itu, kita dapat mengubah zona waktu secara global melalui konfigurasi pada php.ini. Seperti pada pembahasan pada bagian awal, buka file php.ini dan cari kata-kata date.timezone, kemudian ganti nilainya sesuai dengan yang diinginkan, misal kita ganti dengan Asia/Jakarta

Timezone Asia-Jakarta Pada PHP

Untuk melihat perubahan, restart server apache.

3 Mengubah Zona Waktu Pada PHP On Demand

Cara ketiga adalah mengubah waktu hanya ketika kita perlukan (on demand). Untuk melakukannya, kita gunakan fungsi gmdate(), fungsi tersebut sama dengan fungsi date(), bedanya, gmdate() menghasilkan waktu GMT + 0, contoh:

<?php
echo date('Y-m-d H:i:s'); // 17-01-2017 02:35:05 - Default timezone GMT + 1
echo gmdate('Y-m-d H:i:s'); // 17-01-2017 01:35:05 - GMT + 0

Selanjutnya, untuk mengubah menjadi GMT + 7, kita tambahkan waktu 7 jam dalam detik ke argumen kedua fungsi gmdate() sebagai berikut:

<?php
echo 'Default Timezone: ' . date('d-m-Y H:i:s');

$timezone = time() + (60 * 60 * 7);
echo 'Indonesian Timezone: ' . gmdate('d-m-Y H:i:s', $timezone);

Hasil yang saya peroleh:

Default Timezone: 17-01-2017 02:39:10
Indonesian Timezone: 17-01-2017 08:39:10

Pada contoh diatas, fungsi time() akan menghasilkan timestamp dalam GMT + 0, sehingga dengan menambahkan 7 jam, kita dapatkan waktu dalam GMT + 7

4 Mengubah Zona Waktu Pada PHP On Demand – Dengan Class DateTime

Cara keempat adalah menggunakan class DateTime dan DateTimeZone. Kedua class ini mulai ada pada php versi 5.2.0. Contoh penggunaannya adalah sebagai berikut:

<?php
$timezone = new DateTimeZone('Asia/Jakarta');
$date = new DateTime();
$date->setTimeZone($timezone);

echo 'Indonesian Timezone: ' . $date->format('d-m-Y H:i:s') . '<br/>';
echo 'Default Timezone: ' . date('d-m-Y H:i:s');

Hasil yang kita peroleh:

Indonesian Timezone: 17-01-2017 09:52:42
Default Timezone: 17-01-2017 03:52:42

Demikian pembahasan mengenai timezone pada PHP dan cara mengatasi selisih waktu pada PHP, semoga bermanfaat.

Subscibe Now

Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com

Komitmen Kami: Kami senantiasa menghargai privasi Anda dan tidak akan membagikan identitas Anda ke pihak manapun.

8 Feedback dari pembaca

  • Selamat sore mas Agus, mau tanya!. saya kan udah merubah timezone ke indonesia. tapi ketika komputer saya di rubah tanggalnya diserver juga malah ikut rubah. karana sistem saya memerukan date yg real time, takutnya kalau ada yg iseng or emang tanggal komputer ngaco. apakah bisa ada pringatan kalau date dikomputer tidak real time pada hari tersebut. terimakasih sebelumnya

  • hallo mas salam kenal
    untuk setting waktu di cronjob cpanel, apakah bisa di ubah dari sisi cpanel ? misal dgn ubah php.ini ? atau harus dari sisi server root utama ?

    soalnya saya setting scrip cron, waktunya ga sinkron, benar kata mas, dia set default ke gmt+1, bukan gmt+7

    thanks

  • Mau tanya min, saya pakai script yang nomer 1, di tampilan website sudah berubah, tetapi untuk inputan tanggal ke database jadi 0000-00-00 .. apakah ada script beda lagi kalau untuk inputan ?

  • Mas saya coba setup lastmod di sitemap kok hasilnya gak sesuai lokasi server ya?
    date_default_timezone_get();
    Tapi Output nya 2021-06-17T00:33:36+00:00
    +00:00 kan bukan timezone Asia? soalnya lokasi server web nya kan di Singapore. apa harus di set manual? kalau di set manual takutnya beda sama default lokasi server nya ntar jadinya malah bikin slow.

Silakan tinggalkan komentar

Newsletter

Jadilah yang pertama tahu berita terbaru dari Jagowebdev.com