MySQL:保留服务器时区还是用户时区?

8
我想在我的网站上存储用户登录日期,但我不知道什么是最合理的解决方案。
起初,我考虑使用服务器时区,然后使用服务器机器日期和用户机器日期之间的差异操作进行管理,但我也考虑直接使用时区和php类日期进行更改,因此:
<?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);
?>

我的问题是,保留服务器时区还是使用用户时区哪个方案更好?
如果我使用用户时区,是否应该像我的示例一样保存时区名称?

3个回答

14

我建议使用服务器时区或UTC,而不是为每个用户存储不同的数据。这样,您的数据库将完全一致,并且可以执行某些操作(如比较)而无需获取user_timezone列并执行转换(这不是完全免费的)。


1
UTC可以简化大多数事情。特别是夏令时切换。 - Ivan Nevostruev
4
+1,但对于UTC而非服务器时区来说更是如此。如果您想将服务器迁移到其他地方,或者在世界上有多个服务器,会怎样呢? - Blair Conrad
非常感谢您的帮助,您是否也了解带有相应偏移量的UTC表?例如-1100、-1200、-1300等。 - vitto

2

使用UTC。这将节省您许多沮丧的时间。

用户本地时间是演示问题 - 对于给定用户,将其转换为/从本地时间比跟踪数据库中每个记录的日期字段的TZ要容易得多。

即使使用服务器的时区可能很诱人,但夏令时规则可能会在非常短的时间内更改(参见:阿根廷DST 2009 - 政府已决定不使用DST,约1周之前应该发生); 在某些情况下,时区本身可能会更改(请参见印第安纳州的时间)。 UTC的定义不太可能经历任何如此激烈的变化。

(关于服务器时间和本地时间的故事:有一个位于美国西海岸的服务器,将其移动到美国东海岸; 应用程序正在使用服务器时间; 所有混乱都爆发了。通过虚拟化,可以轻松快速地将服务器移动到不同的大陆。)


1

只需使用:

time();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接