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 pada server. 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 = 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'");
Pingback: Akses Database Menggunakan PDO pada PHP | Sibudi </>
maaf mas script ny d taruh d mana??
apa d taruh d atas .httaccess??
Bukan di .htaccess ya, ini script PHP.
Ditaruh di bagian paling atas setiap script php yang membutuhkan waktu. Atau bisa menggunakan file terpisah dan tinggal di-include setiap kali dibutuhkan.
Masih bingung mas..saya coba di web ga jadi.
Keep Posting ! Good
wow…
akhirnya….
sinkron juga waktunya
terima kasih nih sharenya
Mas, mohon bantuannya untuk validasi waktu dengan memanfaatkan fungsi-fungsi diatas.
Saya punya tabel MySql “abc”, diantaranya berisi kolom “batas_waktu” dengan TYPE: Time, yang akan dijadikan validator.
Contoh record : “13:30:00”
Saya membutuhkan validasi dengan kondisi:
jika “waktu saat ini” > “batas_waktu”
maka “hasilnya”.
Mohon bantuannya.. terima ksih
akhirnya 😀 ..
lanjut berbagi bro 😀
makasih mas akhirnya sinkron juga waktunya
Thank you mas. sangat berguna sekali. Yuhu.
thanks mas. waktunya udah sama
Great!!!! Thanks a lot brother!!! It’s work like a charm 😀
Bermanfaat sekali postinganya mas…..
mas knapa ya klau saya pke curtime waktunya kok -12 jam dari waktu asli? mohon bantuannya!
Nah ini dia dari kmrn ubek2 om google gk nemu2 stuck, maklum programer otodidak..
Thanks master suhu.
Klo bole req donk cara multi query .thanks
Mas saya punya tabel antrian, nah nanti orang di tabel antrian tersebut akan di sms nomor antrian dan estimasi waktunya di, itu bagaimana ya mas pertambahan waktunya?
Mas saya punya tabel antrian, nah nanti orang di tabel antrian tersebut akan di sms nomor antrian dan estimasi waktunya di, itu bagaimana ya mas pertambahan waktunya?
Tolong bantu yah mas
makasih bro bermanfaat waktu udah berubah nih di web ane http://virtual.pe.hu/
wkwkwkw makasih gan , sudah saya terapkan scripnya dan berhasil, emank susah kalo mau ambil jam:menit:detik kalau dari server, jika tidak menggunkan fungsi date_default_timezone_set(‘Asia/Jakarta’);
jam:menit:detik akan sembarang masuk di database, thx
Mantap Gan, … Thanks gan dah bantu kerjaan sy…
thanks for the solution
saya menggunakan mysql untuk database kippo graph honeypot. saya punya masalah pada “end date (last attack)” pada visualization, ketika saya menyerang honeypot yang telah saya buat untuk di coba pada waktu 11.32 AM tapi laporan yang saya terima adalah waktu 05.32 AM. bagaimana cara saya memperbaiki masalah tersebut ?
terima kasih…
omg thanks berat
xs
saya sudah coba masi tapi masih gagal
Segera bergabung di Hashtag Option. Platform Trading Forex pertama di Indonesia,
Trading binary option berbasis Indonesia dengan payout hingga 85%, minimal depo 50.000,-
Dapatkan bonus depo pertama 10%** T&C Applied…
Anda juga mendapatkan BONUS Referral 1% dari rofit investasi tanpa turnover….
Hayooo daftar sekarang juga. kunjungi website kami di http://www.hashtagoption.com.
Salam Profit
kalau di implementasi di codeigniter gimana ya gan? bingung
← Previous Post
Next Post →
Cari Catatan Saya
Catatan Terbaru
Kategori
Blogroll
Arsip
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
© 2024 Sibudi </>. Theme: Ari by Elmastudio. Proudly powered by WordPress.