Menyesuaikan Zona Waktu di MySQL dan PHP

Ketika membuat sebuah aplikasi website, seringkali waktu yang ditunjukkan oleh server tidak sama dengan waktu client. Ini terjadi karena server terletak di zona waktu yang berbeda dengan client. Misalnya server yang berlokasi di USA, jelas berada di zona waktu yang berbeda dengan client di Indonesia.

echo date('d-m-Y H:i:s');

Kode PHP di atas akan menampilkan waktu aktual padaserver. Jika dicoba di localhost tentu saja waktunya akan sama seperti komputer lokal, namun hasilnya bisa berbeda jika dicoba pada server web Anda. Agar hasilnya sesuai dengan waktu di komputer kita, tambahkan pengaturan zona waktu.
date_default_timezone_set('Asia/Jakarta');
echo date('d-m-Y H:i:s');

Untuk zona waktu yang lain bisa menyesuaikan.

Namun cara di atas memiliki beberapa kelemahan, terutama pada aplikasi yang menggunakan database. Selain kemungkinan terkena bug Y2K38, MySQL dan PHP memiliki pengaturan zona waktu yang terpisah. Misal kita menjalankan fungsi NOW() pada MySQL, waktu yang ditampilkan tidak sesuai dengan zona waktu kita. Selain itu, aplikasi juga membutuhkan tambahan proses setiap kali mengolah data dari field waktu pada MySQL agar sesuai dengan zona waktu kita.

Agar proses penyesuaian waktu bisa berjalan secara otomatis, kita harus mengetahui berapa selisih waktu client dengan UTC, kemudian beritahukan kepada MySQL. Pertama-tama dengan bantuan class Datetime, kita dapatkan offset (untuk menutupi selisih yang ada) dalam detik, kemudian mudah saja kita konversikan ke dalam menit dan jam.

$sekarang = new DateTime();
$menit = $sekarang -> getOffset() / 60;
Kemudian cari tau apakah offset bernilai positif atau negatif, lalu konversikan saja ke bilangan positif untuk memudahkan penghitungan.
$tanda = ($menit < 0 ? -1 : 1);
$menit = abs($menit);
$jam = floor($menit / 60);
$menit -= $jam * 60;
Gunakan fungsi sprintf untuk memformat string agar bisa diterima MySQL (format yang bisa diterima misalnya: +07:00).
$offset = sprintf('%+d:%02d', $tanda * $jam, $menit);
Terakhir jalankan query SET time_zone setelah mengkoneksikan aplikasi dengan database. Silakan ganti dengan koneksi database yang Anda gunakan.
mysql_connect($server, $username, $password);
mysql_select_db($database);
mysql_query("SET time_zone = '$offset'");
Akhirnya pengaturan zona waktu antara PHP dan MySQL telah sesuai. Berikut ini adalah gabungan kode-kode snippet di atas.
<?php
date_default_timezone_set('Asia/Jakarta');
$sekarang= newDateTime();
$menit= $sekarang-> getOffset() / 60;
$tanda= ($menit< 0 ? -1 : 1);
$menit= abs($menit);
$jam= floor($menit/ 60);
$menit-= $jam* 60;
$offset= sprintf('%+d:%02d', $tanda* $jam, $menit);
mysql_connect($server, $username, $password);
mysql_select_db($database);
mysql_query("SET time_zone = '$offset'");
Sumber: http://blog.sibudi.net/menyesuaikan-zona-waktu-di-mysql-dan-php/

Tinggalkan komentar