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'
);
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;
$tanda
= (
$menit
< 0 ? -1 : 1);
$menit
=
abs
(
$menit
);
$jam
=
floor
(
$menit
/ 60);
$menit
-=
$jam
* 60;
$offset
= sprintf(
'%+d:%02d'
,
$tanda
*
$jam
,
$menit
);
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'"
);
<?php
date_default_timezone_set(
'Asia/Jakarta'
);
$sekarang
=
new
DateTime();
$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'"
);