sql NOW()并返回用户的实际时区?

时间:2013-09-04 08:41:36

标签: mysql sql timezone

在我的数据库中,我使用NOW()存储用户上次登录日期/时间。我意识到这个商店使用我的服务器时区,我没有问题。虽然我打算将此用于我自己的目的(他们说他们从未登录过或yada yada)我也希望能够在他们的个人资料上显示最后一次登录时间,以便他们查看。

最佳做法是什么?目前我认为我应该让他们从他们的个人资料中选择/编辑时区,然后这会将存储在数据库中的NOW()值转换为他们的时间。这将需要数据库中的另一列,但允许我对他们的时间进行正确的计算,并列出他们为他们的个人资料选择的当前时区。

例如,我在est,所以我可以在他们的帐户资料中向他们显示2013-09-04 02:46:05 EST,但也让他们编辑他们的时区来纠正它的显示,同时保留原始DB中的est日期(我的服务器配置tz)。

我意识到给用户他们的最后登录日期/时间似乎没用,但对于这个网站来说它实际上会对他们有一些价值所以我想确保它反映'他们'的时间并且对他们有意义。

这是最好的做法还是更好的想法?

1 个答案:

答案 0 :(得分:1)

您无法从服务器中找到用户的时区。周期。

我强烈建议您使用UTC(来自getutcdate())存储登录时间,因为它是明确的。如果您使用当地时间,那么夏令时转换将导致“重复小时”,其中将记录相隔一小时发生的事件的相同时间。这使得无法确定事件实际发生的时间。

如果您不知道用户的时区,只需显示UTC并告诉用户它是UTC,这样就不会混淆。

但是,如果您想知道用户的时区,您必须让客户端软件告诉您,可能是询问用户,并将其存储在他的首选项中。或者你可以从JavaScript猜测。

另请参阅此问题,该问题更详细地讨论了时区问题: