2009-12-05 70 views
8

我在考慮存儲日期用戶登錄我的網站,但我不知道什麼是最合理的解決。MySQL:保持服務器時區或用戶時區?

最初,我雖然要使用服務器時區,然後使用服務器機器日期和用戶機器日期之間的差異操作來管理它,但我也考慮過使用時區和php類日期更改它direclty,所以:

<?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); 
?> 

我問,什麼是最好的解決方案,保持服務器時區或使用用戶時區?
如果我使用用戶的時區,應該我也保存區名稱作爲我的例子嗎?

回答

14

我建議使用服務器時區或UTC,而不是存儲爲每個用戶不同的數據。這樣,您的數據庫將完全一致,並且您可以執行一些操作(如比較),而不必爲每個條目獲取列並執行轉換(它不是完全免費的)

+1

UTC可以簡化大多數事情。特別是DST開關 – 2009-12-05 13:49:10

+4

+1,但在服務器時區UTC更是如此。如果您想要稍後移動服務器,或者在全球有多臺服務器,該怎麼辦? – 2009-12-05 13:49:20

+0

感謝太多的幫助,你也知道與respecitve offests的UTC表? so -1100,-1200,-1300等。 – vitto 2009-12-05 14:39:45

2

使用UTC。它會爲你節省很多小時的挫折。

用戶本地時間呈現的問題 - 它更容易轉換到/從本地時間給定用戶,比它是跟蹤數據庫中的每個記錄的日期字段的TZ。

即使使用服務器的時區可能是很有誘惑力,DST規則可能改變非常短的時間內(見:Argentina DST 2009 - 官立已經決定不使用DST,APPX前1周這是應該發生的。) ;在某些情況下,時區本身可能會發生變化(請參閱Time in Indiana)。 UTC的定義不太可能發生任何如此劇烈的變化。 (有關服務器時間和當地時間的故事:在美國西海岸有一臺服務器,將它移動到美國東海岸;應用程序使用服務器時間;所有地獄崩潰了;通過虛擬化,可以輕鬆快速地移動服務器不同大洲