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'");

Comments

49 responses to “Menyesuaikan Zona Waktu di MySQL dan PHP”

  1. […] pada PHP versi 5.5. Itu artinya, penggunaan fungsi mysql_connect() atau mysql_query(), seperti pada postingan yang lalu, harus diganti. Pilihannya adalah menggunakan Mysqli Extensions atau yang akan dibahas berikut ini, […]

  2. alundra00 Avatar
    alundra00

    maaf mas script ny d taruh d mana??
    apa d taruh d atas .httaccess??

    1. Sibudi Avatar

      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.

  3. sgiant Avatar

    Masih bingung mas..saya coba di web ga jadi.

  4. Oriza Avatar

    Keep Posting ! Good

  5. panggeh Avatar
    panggeh

    wow…
    akhirnya….
    sinkron juga waktunya
    terima kasih nih sharenya

  6. Hady Avatar
    Hady

    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

  7. Mantap Avatar

    akhirnya 😀 ..
    lanjut berbagi bro 😀

  8. edward Avatar
    edward

    makasih mas akhirnya sinkron juga waktunya

  9. Fuddychoi Avatar
    Fuddychoi

    Thank you mas. sangat berguna sekali. Yuhu.

  10. Ahmad sopian Avatar
    Ahmad sopian

    thanks mas. waktunya udah sama

  11. Hafidz I B Avatar

    Great!!!! Thanks a lot brother!!! It’s work like a charm 😀

  12. Disarada Avatar

    Bermanfaat sekali postinganya mas…..

  13. andar Avatar
    andar

    mas knapa ya klau saya pke curtime waktunya kok -12 jam dari waktu asli? mohon bantuannya!

  14. budi Avatar

    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

  15. Tiara Avatar
    Tiara

    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?

  16. Tiara Avatar
    Tiara

    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

  17. rino Avatar

    makasih bro bermanfaat waktu udah berubah nih di web ane http://virtual.pe.hu/

  18. risky Avatar

    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

  19. Edwin Avatar
    Edwin

    Mantap Gan, … Thanks gan dah bantu kerjaan sy…

  20. Arman Avatar
    Arman

    thanks for the solution

  21. Bobi Avatar
    Bobi

    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…

  22. thrombohope Avatar
    thrombohope

    omg thanks berat

  23. arman Avatar
    arman

    saya sudah coba masi tapi masih gagal

  24. Hahstag Option Avatar

    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

  25. Rendi Avatar
    Rendi

    kalau di implementasi di codeigniter gimana ya gan? bingung

  26. ラブドール Avatar

    and attachment orientation all appear to play a role in how desire discrepancies impact sexual and intimate relationships.Among older lovers,ラブドール オナニー

  27. ラブドール エロ Avatar

    女性 用 ラブドールsince nothing vanishes in thisworld,but that I shall always exist and always have existed.

  28. ラブドール エロ Avatar

    clock that evening,高級 オナホWeyrother drove with hisplans to Kutúzov,

  29. エロ い コスプレ Avatar

    pagdaca’y napaguitna ang isang dalaga at piniguil ngcanyang linalic na camay ang mapaghiganting bisig: ang dalagang iyo’y siMaria Clara.エロ ランジェリーTiningnan siya ni Ibarra ng isang titig na wari’y nanganganino angcasiraan ng isip.

  30. ラブドール Avatar

    .. to gostraight home? My God,my God! Why did I invite myself to this dinneryesterday? But no,女性 用 ラブドール

  31. エロ い コスプレ Avatar

    une même tonalitéace premier Swann rempli de loisir,parfumé par l’odeur du grandmarronnier,エッチ コスプレ

  32. エロ い コスプレ Avatar

    Umaalingawngaw sa alangalang ang musica; napaimbulog ng boongcasayahan ang usoc ng mga calang ang any’y manipis na ipoipo: umaawitang tubig sa loob ng mainit na palayc; marahil ay mga salitangpangaliw sa mga isdang patay,ストッキング エロmarahil ay libac at cutya:nagpapapihitpihit ang bangcay ng buaya,

  33. エロ い コスプレ Avatar

    Ng?unì’t sa di mabatid nakaparaanan ay nakalalampas si Tadeo sa mg?a pagsusurì,ginigiliw ng?kaniyang mg?a propesor at nahaharap sa isang magandang kinabukasan.ボディ スーツ エロ

  34. ラブドール Avatar

    But no matter,no matter! That’s what I am going for.女性 用 ラブドール

  35. ラブドール Avatar

    アジア えろ.. and he a roll ofpaper.””Paper notes?””Paper notes; and we exchanged.””I don’t mind betting that there’s a flavour of bribery about it,”observed a respectably dressed,

  36. ベビー ドール ランジェリー Avatar

    atgayn man,海外 コスプレ えろsa aking panganganib na baca aking masugatan ang walangmalay,

  37. ラブドール Avatar

    アダルト フィギュア 無 修正was invisible andwithout form; and we were covered with the darkness of ignoranc ForThou chastenedst man for iniquity,and Thy judgments were like the greatdeep unto him.

  38. 여성전용 마사지 Avatar

    From the very first moment I stepped into 여성전용마사지, it felt like the outside world disappeared, and I was finally
    in a space created just for me—a place where I could breathe deeply, relax completely, and reconnect with myself.

  39. ダッチワイフ Avatar

    ラブドール 最新for want ofmoney and interest,have grown grey in the rank of lieutenants,

  40. ダッチワイフ Avatar

    ドール エロit must beconsidered as nullius in bonis.In this case,

  41. ダッチワイフ Avatar

    ラブドール 最新your sarvant has robbed me of fivethousand pounds,and ll have satisfaction,

  42. ダッチワイフ Avatar

    人形 エロin order to pursue her learning.For,

  43. ダッチワイフ Avatar

    ロボット エロItwas a grey and heavy day,the country was exactly as he remembered indeed he recalled it far more vividly in his dream than he had done inmemory.

  44. ダッチワイフ Avatar

    laughed privately at her rudenesse and toldgood stories about her,セックス ロボットwhile none the less all without exceptionrespected and feared her.

  45. ダッチワイフ Avatar

    “Till death itself? ?She took his arm and with a happy face went with him into the adjoiningsitting room.CHAPTER XIVAfter receiving her visitor the countess was so tired that she gaveorders to admit no more,セックス ロボット

Leave a Reply to Hahstag Option Cancel reply

Your email address will not be published. Required fields are marked *