PHP / MySql Saat Dilimi (Timezone) Ayarlarma, Değiştirme

Hosting alınan yer ile yerel saatimiz uyuşmuyorsa yaptığımız kodlamalarda veya scriptlerde saatin istediğimiz gibi göstermediğini görürüz. Örneğin şu an Amerika’daki bir hosting şirketinde kurulu olan sitenin saati ile Türkiye saati arasında 7-8-9 saat kadar fark var. Sunucu saatinin kaç olduğunu öğrenmek için PHP ile;

kodunu kullanabilirsiniz. Türkiye ile arasındaki farkı gördünüz. Şimdi ise şu kodu kullanarak kontrol edelim.

Şimdi ise TR saati ile aynı saati görmüş olmalısınız. İşte bu şekilde PHP ile yapılacak tüm tarih işlemlerinde sayfanın en üstüne saat dilimi (timezone) ayarını veren o kodu koymalısınız.

İşin PHP kısmını hallettik. Peki MySql kısmını nasıl yaparız? O da basit sayılır. MySql tablomuzda timestamp alanları varsa ve on update CURRENT TIMESTAMP şeklinde bu alanlar güncellenirken sunucu saatine göre otomatik güncellenir. Bu durumda veritabanında saatler sunucu saati olarak kalır. Ancak verileri çekerken bunu düzeltmek için MySql bağlantısı yapıldıktan sonra aşağıdaki sorgu çalıştırılır.

Güncelleme: Aşağıdaki mysql sorgusu yerine mysql bağlantısı kurduktan hemen sonra şu php komutu tüm problemleri çözebilir.

Aşağıdaki mysql sorgusu üstteki başarılı olmazsa deneyin.

+3:00 şu anki TR saat dilimine denk geliyor. GMT+3 veya UTC+3. Saatler ileri veya geri alınırsa bir arttırmak veya azaltmak gerekebilir.PHP’deki gibi buraya da Europe/Istanbul yazmak isterdik ama çalışma durumu var. Deneyebilirsiniz.

Böylece sunucudan çekilen tarih verileri tablolarda sunucu saatine göreyken gösterimde TR saati olur.

Burada en büyük sıkıntı veritabanında kayıtlı olan tarih verileri TR saati olmayacak olması. Belki ileride sunucu değiştirince saat dilimleri iyice uyuşmaz olacak. Bu ihtimalden dolayı veritabanına da tarih bilgisini o zaman sunucuya bırakmayıp biz girmeliyiz. Mesela veri tipi olarak CURRENT TIMESTAMP kullanmayıp  DATETIME kullanarak kodlamada NOW()  komutu ile bu işi çözebiliriz.

Ayrıca sunucu değiştirirken sunucu saati dilimi değişmesinden bahsettik ama taşınacak sql dosyasında time_zone değeri vardır. Eski sunucuyla yeni sunucu arasında kaç saat fark varsa + veya – olarak o değer değiştirilir ve import edilen sql’de de değerler güncel kalır. TIMESTAMP kullanıyorsanız bunu bilin. TIMESTAMP kullanmıyorsanız zaten sql dosyası içideki time_zone işlevsiz kalabilir ve zaten saat dilimi değişmeyecektir.

Takıldığınız yer veya daha kolay çözüm öneriniz varsa yorum olarak yazınız.

Bir yorum yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir