2009-02-05 14 views
29

Geçtiğimiz birkaç saat boyunca bu konu hakkında bir şeyler okudum ve sanırım bunun üzerinde bir saptamam var, ama biraz onay istiyorum.PHP'de farklı saat dilimlerindeki tarihleri ​​depolamanın/görüntülemenin en iyi yolu nedir?

Durum MySQL saklanacaktır Yorum yazmak için muktedir Kaliforniya, diyelim ki, bir kullanıcı istiyorum. Daha sonra Texas'taki yorumu, kendi saat dilimine göre ayarlanan gönderim tarihi ile birlikte görüntüleyebilmeyi istiyorum. date_default_timezone_set('UTC');

  • $Date = new DateTime(); ile bir DateTime nesnesi almak için: Çözüm

    1. Çalıştır saklanması

      uygulamanın başlangıcında aşağıdaki Önerilen

      böylece tüm tarih fonksiyonları UTC saat dilimini kullanın UTC'de geçerli tarih ve saat.

    2. MySQL'de datetime türü sütununa eklenecek değeri almak için $Date->format()'u kullanın.

      1. JavaScript, kullanıcının saat dilimi bilgileri alın ve çerez depolamak gösteriliyor

      .

    3. Tarihsaat sütun değerini almak için bir MySQL SELECT sorgusu çalıştırın. Bir DateTime nesnesini saklanan UTC zamanı ile eşzamanlamak için
    4. $Date = new DateTime($row['time']);. UTC saatini kullanıcının saat dilimine göre ayarlamak için
    5. $Date->setTimezone(new DateTimeZone($userTimezone));. $Date->format();

    kullanılarak

  • Ekran neler özü yapılacak mı? Daha iyi bir çözüm eksik miyim? Yardım ettiğin için teşekkür ederim!

  • cevap

    14

    Daha basit yapılabilir. JavaScript kullandığınızdan, neden istemcide saat dilimini ayarlamak için JavaScript kullanmıyoruz?

    1. depola UTC olarak sunucudaki tüm zamanlar
    2. Müşteri UTC olarak müşteriye servis yapın JavaScript yerel saat dilimi için zaman ayarlamak kullanır

    Sadece bu İşleri basitleştirmek yok ama aynı zamanda modelinizle ilgili bir problemin üstesinden gelir. Hesabımı New York'a kaydettiysem ancak Avustralya'ya seyahat ettiğimde, Avustralya saat dilimine göre saatleri görmek istiyorum. Aslında, kullandığınız JavaScript'i kullanarak ayarları kolayca ayarlayabilir ve tasarımı daha da dinamik hale getirebilirsiniz.İkincisi, kullanıcının saat dilimini saklama yükünü ortadan kaldırabilirsiniz.

    Bu, eğer tasarımınızın JavaScript olmayan tarayıcılara indirgenmesini istiyorsanız, HTTP tanımlama bilgilerine dayanan tam bir sunucu tarafı yaklaşımı almaktan daha iyidir (çerezleri almak için JS'ye güvenmek yerine).

    +0

    Saat dilimi çerezini kullanıcı girişinde ayarlayacağımı düşünüyorum, bu yüzden Avustralya'ya gidip oradan giriş yaparsanız güncellemelidir. Bazı JavaScript'in sayfa yüklemesinde çalıştırıldığını mı söylüyorsunuz, örneğin, gibi süreleri arar ve hepsini anında dönüştürür? –

    +0

    Kullanıcı saatine ulaşmanın tek yolu JS veya geo-ip ile. İkincisi karmaşık ve güvenilmezdir. Eğer JS'yi her durumda kullanacaksanız, o zaman girişte yapmak daha fazla ev tutmak (sunucu tarafı izleme) gerektirir. Bunu uçurumda yapmak daha mantıklı. – aleemb

    +0

    Teşekkürler. Daha fazla araştırırken, sizinle aynı fikirde olmaya başladım. –

    3

    Yapmanız gereken tüm hakları. Tüm tarihleri ​​UTC (GMT + 0) içinde saklayın, bunları veritabanından alın ve kullanıcının ofsetini uygulayın.

    Esasen, her şey baştan sona örtülmüştür, gerçekten eklenecek bir şey yok, bunu zaten yaptığınız şeyden daha iyi bir hale getirebileceğinizi düşünmüyorum.

    +0

    Katılıyorum, yapacağım şey budur. – Ross

    İlgili konular