Vb PHP, MySQL, karşısında tarihleri ​​yönetmek için en iyi yolu nedir?

4 Cevap php

Benim sunucu Dallas olduğunu. Ben .. New York'ta yaşıyorum ve PHP ve MySQL hem dilimini ayarlamak için yapılandırma değişkenleri var.

Onları nasıl hep birlikte çalışmak için alabilirim? Ben MySQL neler tarihleri ​​saklamak gerekir? Nasıl PHP kullanıcının tercihine göre değişen tarihini ele alabilirim?

Unutmayın: Ben şimdiye kadar hep "ŞİMDİ ()" sorgularda .. ancak bunu yapmak için ihtiyacı öngörüyoruz kullanıyor, PHP açıkça tarihini ayarlamak yaşıyorum sanmıyorum. Bu nasıl yapılabilir ki?

SO deneyimi bana burada yardımcı olabilir umuyorum.

4 Cevap

Her yerde Unix Zaman kullanın. Her timezone için aynı olduğunu bu yüzden UTC kullanıyor. Tarihler için yöntemler genellikle buna dönüştürmek ve ondan geri onlar timezone bilgileri kullanarak, böylece kendinizi doğru bir zaman olurdu.

Alternatif olarak, yalnızca (PHP, ya da JavaScript istemci çalıştıran sunucuya DB gibi) başka bir bilgisayardan zaman transfer Unix Zaman kullanabilirsiniz. Fonksiyonlar her dilde buna dönüştürmek ve ondan için var. MySQL için öyle:

UNIX_TIMESTAMP(date)
FROM_UNIXTIME(unix_timestamp)

Size zaman düzgün DB ve günlükleri biçimlendirilmiş ama olabilir Bu şekilde hala her yerde doğru yerel saati var.

Ben çevreye saygı ile doğal formunda tarihleri ​​ve saatleri kullanmayı tercih, yani PHP Unix zaman damgaları ve MySQL TARİH / SAAT / DATETIME / DAMGASI alanlar. Ben her iki değerleri kullanarak başka çevirmek FROM_UNIXTIME() and UNIX_TIMESTAMP() . Yerli tarih / kere okumak çok kolay, çünkü yerine Unix zaman damgasının bu tercih.

GMT tarihleri ​​kaydedin (sıfır ofset) ve ardından yerel saatine dayalı offset (EST örneğin, +6, yani GMT'ye 6 saat eklemek istiyorum) hesaplayabilirsiniz.

date_default_timezone_set() fonksiyon için Date docs edin.

Sadece veritabanına yazarken, sen, zaman dilimlerini değiştirmek zorunda tarihini saklamak, sonra tekrar değiştirmek gerekir, unutmayın. Eğer tarih alınırken yaparken Aynı şekilde, ofset dilimini eklemek için unutmayın.

The mysql-server stores dates in a timezone independent format (UTC).
But before it stores the date it will be converted using its timezone.

U bağlantısı * 1 başına mysql dilimini değiştirebilirsiniz:

mysql_query('SET time_zone = "'.$timezone.'"');

Ayrıca komut başına dilimini değiştirebilirsiniz.

date_default_timezone_set($timezone);

Eğer aynı zaman dilimine göre bunları eğer "2009-01-10 13:30:00" MySQL ve PHP hem de aynı şey demek olacaktır.

Ama 2 sunucuları farklı iç saat değerlere sahip olduğunu akılda tutmak, bu yüzden şimdiki zamana dayalı damgaları oluşturmak istiyorsanız. MySQL veya php bunu.

*1) MySQL timezone support may require additional configuration. check the manual