MySQL: sunucusu saat dilimini veya kullanıcı dilimini tutmak?

3 Cevap php

Sitemde kullanıcı oturum açma tarihleri ​​depolamak için düşünüyorum, ama ben en mantıklı çözüm nedir bilmiyorum.

Başlangıçta, ben olsa sunucu timezone kullanmak için, ve sonra sunucu makine tarihi ve kullanıcı makine tarih arasındaki fark işlemlerini kullanarak yönetmek için, ama ben de, zaman dilimini ve php sınıfı tarihini kullanarak direclty bunu değiştirmek için kabul ettik:

<?php
// my server has for example America/New_York timezone
$user_timezone = "Europe/Rome";
date_default_timezone_set ($user_timezone);
$date = date ('Y-m-d H:i:s');
$sql = "UPDATE users SET user_last_modify = '$date', user_timezone = '$user_timezone' WHERE user_id = 'some id' LIMIT 1;";
$res = mysql_query ($sql);
?>

My ask is, what is the best solution, keep server timezone or use user timezone?
and if I use user timezone, should I save the timezone name too as in my example?

3 Cevap

Ben daha ziyade her bir kullanıcı için farklı veri depolamak yerine, sunucu dilimini veya UTC kullanmanızı tavsiye ediyorum. Bu şekilde, veritabanı tamamen tutarlı olacak ve her giriş için, kalmadan karşılaştırmalar gibi bazı işlemleri gerçekleştirebilirsiniz, * user_timezone * sütun getirme ve (tamamen ücretsiz değil) dönüşüm gerçekleştirmek

Kullan UTC. Bu size hayal kırıklığı birçok saat kurtaracak.

Kullanıcı yerel saati sunum meselesi - o veritabanındaki her kaydın tarih alanları TZ izlemek için daha belirli bir kullanıcı için yerel zaman / 'dönüştürmek çok daha kolay.

Sunucunun dilimini kullanıyor cazip olabilir bile, DST kurallarına bakınız (very kısa haber üzerine değişebilir: Argentina DST 2009 - hazine DST kullanmak için kararını verdi, yaklaşık 1 hafta önce. o) gerçekleşmesi gerekiyordu; Bazı durumlarda, zaman dilimi kendisi (Time in Indiana bakınız) değişebilir. UTC tanımı böyle bir köklü değişim geçmesi mümkün değildir.

Sunucu zaman ve yerel zaman hakkında (bir hikaye: ABD Batı kıyısında bir sunucu, ABD'nin Doğu kıyısında onu taşındı; uygulamalar sunucu saati kullanıyorlardı; kıyamet koptu sanallaştırma ile, kolayca ve hızlı bir şekilde {farklı sunucularına taşımak mümkündür. [(0)]}.)

Sadece kullanımı:

time();