Apa cara terbaik untuk menangani Zona Waktu yang berbeda?

9

Saya sedang mengerjakan aplikasi web di mana akan ada banyak pengguna berbeda dari seluruh dunia membuat pembaruan. Saya bertanya-tanya apa cara terbaik untuk menangani zona waktu? Idealnya, ketika suatu peristiwa terjadi, semua pengguna melihatnya menggunakan waktu lokal mereka.

Haruskah waktu OS server diatur ke GMT, waktu lokasi fisik, atau waktu lokasi pengembangan saya?

Haruskah logika aplikasi (PHP) dan database (MySQL) diatur untuk menyimpan data sebagai GMT atau waktu lokal (lokal ke pengguna)?

Apakah ada standar industri atau bahkan solusi sederhana / jelas yang tidak saya lihat?

Thomas Hunter
sumber

Jawaban:

4

Simpan acara Anda dalam format TIMESTAMP MySQL - disimpan secara internal sebagai UTC terlepas dari zona waktu server / pengguna. Dengan cara ini data bersifat portabel terlepas dari konfigurasi spesifik server Anda. Jika Anda menyimpannya di zona waktu tertentu, Anda akan memiliki lebih banyak pekerjaan untuk mengubahnya menjadi zona waktu yang berbeda.

Ambil dari database menjadi cap waktu numerik (menggunakan fungsi UNIX_TIMESTAMP ()) untuk digunakan dengan berbagai fungsi tanggal / waktu PHP (seperti tanggal ()).

Anda kemudian perlu mengatur untuk setiap pengguna zona waktu PHP menggunakan date_default_timezone_set () - Anda bisa mendapatkan informasi itu baik melalui pengaturan yang dapat dikonfigurasi pengguna atau dari header browser (kurang akurat). Anda kemudian dapat menggunakan fungsi tanggal / waktu PHP seperti biasa, dan hasilnya akan berada di zona waktu pengguna.

Alternatif lain adalah dengan menunjukkan waktu relatif (misalnya: "5 jam dan 2 menit yang lalu").

Eran Galperin
sumber
5
Ketahuilah, bahwa (MySQL-) timestampmemiliki rentang terbatas dari 1970-01-01 00:00:01 UTChingga 2038-01-19 03:14:07 UTC, yang misalnya tidak memungkinkan untuk menyimpan tanggal lahir (setidaknya untuk siapa pun yang berusia lebih dari 40 tahun). Sebenarnya itu timestampadalah solusi yang paling tidak cocok untuk menyimpan catatan tanggal dan waktu. Gunakan datetimebidang dan simpan semuanya sebagai UTC.
feeela
7

Saya akan menggunakan waktu UTC dalam database, dan minta klien mengonversinya ke waktu lokal mereka saat diperlukan

Rachel
sumber
UTC = GMT. Saya sudah terbiasa dengan SQL Server
Rachel
9
UTC! = GMT. UTC mengkompensasi durasi peningkatan tahun yang disebabkan oleh rotasi bumi yang melambat sedangkan GMT tidak. Meskipun dalam praktik istilahnya dipertukarkan, ada baiknya mengetahui perbedaannya. en.wikipedia.org/wiki/Utc
1
@DeveloperArt: Tidak menyadarinya, terima kasih :)
Rachel