PHP farklı saat dilimleri tarihleri ​​görüntüleme / depolama işlemek için en iyi yolu?

2 Cevap php

Ben son birkaç saat boyunca bu konu üzerinde okuma oldum, ve ben bunun üzerine bir kolu var, ama sanırım biraz onay istiyorum.

Situation

Ben California'da, diyelim ki, bir kullanıcı MySQL saklanır Yorum yazmak için mümkün olmak istiyorum. Daha sonra kendi zaman dilimine ayarlanabilir sonrası tarihi ile açıklamayı görüntülemek edebilmek için Teksas, diyelim ki, bir kullanıcı istiyoruz.

Proposed Solution

Storing

  1. date_default_timezone_set('UTC');: Tüm tarih fonksiyonları UTC zaman dilimi kullanmak, böylece uygulamanın başlangıcında aşağıdaki çalıştırın
  2. $Date = new DateTime(); UTC güncel tarih ve saat ile bir DateTime nesnesi alır.
  3. $Date->format() MySQL datetime türü sütun eklemek için değerini almak için kullanın.

Displaying

  1. JavaScript, kullanıcının timezone bilgi alın ve bir çerez saklamak.
  2. Datetime sütun değerini almak için bir MySQL SELECT sorgusu çalıştırın.
  3. $Date = new DateTime($row['time']); depolanan UTC zaman bir DateTime nesne örneğini oluşturmak için.
  4. $Date->setTimezone(new DateTimeZone($userTimezone)); kullanıcının timezone için UTC zamanını ayarlamak için.
  5. $Date->format(); kullanarak ekran

Olan şeyin özü yapılacak mı? Ben daha iyi bir çözüm eksik? Yardımlarınız için teşekkürler!

2 Cevap

Yine de kolay yapılabilir. JavaScript kullanarak beri o zaman neden yanı sıra istemci üzerinde zaman dilimini ayarlamak için JavaScript kullanmak değil mi?

  1. UTC olarak sunucudaki tüm kez saklayın
  2. UTC olarak müşteriye onlara hizmet
  3. JavaScript istemci yerel saat dilimi için zaman ayarlamak kullanır

Bu basit şeyler yapmak ama aynı zamanda modeli ile bir problemin üstesinden gelmez. Ben New York'ta hesabımı kayıtlı ancak Avustralya'ya seyahat ediyorsanız, ben Avustralya saat dilimi başına kez görmek istiyorum. Aslında, kullanmak JavaScript kullanarak kolayca tasarımı daha dinamik hale ayarlarını yapabilirsiniz. İkinci olarak, kullanıcının saat dilimini depolama yükü önleyebilirsiniz.

Bu sizin tasarım JavaScript olmayan tarayıcılara aşağılamak istiyorsanız o zaman (tanımlama getirmesi JS güvenerek aksine) HTTP çerezleri dayanan tam bir sunucu tarafı yaklaşım kalktıktan iyidir, dedi.

Sizin o tüm hakları yapıyor. UTC (GMT +0) tüm tarihleri ​​depolamak, veritabanı gibi onları almak ve kullanıcının ofset geçerlidir.

Esasen, bunu baştan sona kapsamındaki tüm var, eklemek için bir şey gerçekten var, ben size zaten ne yaptığını ötesinde optimize sanmıyorum.