PHP web uygulaması bina dilimi özelliği

3 Cevap php

Bu, birine neredeyse benzer bir soru: -

http://stackoverflow.com/questions/346770/dealing-with-timezones-in-php

Ben bu konuyu okudum ve biraz daha fazla sorunları var, ve zarif PHP / MySQL uygulamasında zaman dilimi desteği oluşturmak için nasıl emin değil.

Kullanıcıların kendi zaman dilimini seçebilirsiniz PHP, bir uygulama yazıyorum.

Burada, bütün damgaları MySQL GMT saklanır. Verileri sunarken Ve ben, kullanıcılar timezone dilimini geri çeviriyorum.

Şimdi bu Karşılıklı sorunlar şunlardır: -

1) I show the user, a list of timezones populated from MySQL's timezone tables, it is a HUGE list and is difficult to chose from.

Yani, pencereler zaman dilimi listesi gibi bir şey uygulamak istiyorum. Bölge bilgi ile ofset.

2) The PHP and MySQL may have different set of list.

3) Where should I convert timezones, in PHP or in MySQL? I have combination of coding. Sometimes it is easy to select a column converted from MySQL, sometimes it is easy to convert in PHP. So, here the previous point becomes very important. For example, in MySQL's time_zone tables Asia/Kolkata, and Asia/Calcutta both were there, but in PHP 5.2.6's default timezonedb, only Asia/Calcutta is present.

3 Cevap

Tam bu sorun ile karşı karşıya iken, ben gülünç kapsamlı Unix tarzı timezone listesinin bir alt kümesine özlü, Windows tarzı timezone harita listesi, hangi this reference bulundu.

Ve kendi seçimi unix tarzı biçiminde (örneğin Amerika / yılında db saklanır: Kullanıcılar bu windows-stil adları (00) Doğu Saati (ABD & Kanada), örneğin, (GMT-05) bir açılır ile sunulmaktadır New_York)

Kullanıcının dilimi tercihi uygulama çalışmaları DateTime class kullanarak görüntüleme anda PHP yapılır. Ben bunu tavsiye ederim düşünüyorum, bu yüzden onlar görüntüleniyor kadar SQL / PHP manipüle konum tarihleri ​​UTC her zaman emin olabilirsiniz.

  1. Büyük bir listeden bir zaman dilimi seçimi de zor değildir. Sıralama kullanıcıların hızlı, doğru ilerleyin böylece ofset standart zaman liste ofset, ve oradan, onların tam konumları arayın.

  2. Bir liste seçin. Ben hangisi daha kısa ise liste için gitmek eğiliminde olacaktır. Sadece kullanıcı için bu seçimler mevcut.

  3. Seçildi listesi matematik yapmak. Eğer MySQL listesinin sunulması ediyorsanız, PHP'nin listesini kullanarak yapıyorsanız, MySQL tarih matematik yapmak zorunda PHP matematik yapmak var. Eğer bir uygulama bölgeleri için eksik bazı garip haritalama anlamaya gerek yok ki, bu yapacaktır.

Bir fantezi çözüm kullanıcının yerini soran ve onların dilimini extrapolating içerebilir. (Ancak, açıkça de bunu ayarlamak için seçeneğiniz vardır)

Bu, özel bir sınıf en iyi çözüm olabilir durumun tür. Sonra onların dilimleri ile etrafında saatlerini ve tarihlerini taşıyabilirsiniz. Neyse ki, PHP v5 sadece böyle bir nesne yerleşik bulunmaktadır. Sen sadece bir örtük dilimine itimat zaman size daha önce açıkça ayarlayabilirsiniz biliyorum, çünkü o kadar şeyleri kod hatırlamak zorunda. Bu aynı zamanda örtülü değeri nedir bilmiyorsanız, bunu açık hale etkili, sormak gitmek demektir.

PHP'nin timezone desteği ve MySQL saat dilimi desteği baktığımızda, ben büyük ölçüde PHP timezone şeyler yapardı. O "şimdi" kavramı var etrafında MySQL desteği büyük ölçüde aydınlatmaktadır.

Ah evet: you do not açık tarih aritmetiği yapmak istiyorum (e.g. adding 86400 seconds to add "one day"). Let the PHP object or libraries do that. They will have bugs fixed you will not have thought of. (I once wrote an object for a specialized type of date manipulation and spent weeks battling an intermittent off-by-one-hour bug, until I discovered the one spot that was adding 86400 to make a day transition instead of using mktime(). Bu ışığından kuralları şeyleri karıştırmasını olduğunu ortaya çıktı. Hangi tabii ki, ben kontrol değildi.)