在我的数据库中,我使用 NOW() 存储用户上次登录日期/时间。我意识到这使用我的服务器时区存储,我没有问题。 虽然我打算将其用于我自己的目的(他们说他们从未登录或yada yada),但我也希望能够在他们的个人资料上显示最后登录时间,以便他们也看到。
对此的最佳做法是什么? 目前,我想我应该让他们从他们的个人资料中选择/编辑时区,然后这反过来会将存储在数据库中的 NOW() 值转换为他们的时间。 这将需要在数据库中的另一列,但允许我为他们的时间进行适当的计算,并列出他们为个人资料选择的当前时区。
例如,我在est,所以我可以在他们的帐户配置文件上向他们显示2013-09-04 02:46:05 EST,但也让他们编辑他们的时区以更正它以显示,同时在数据库中保留原始est日期(我的服务器配置tz)。
我意识到为用户提供他们的最后登录日期/时间似乎毫无用处,但对于这个网站来说,它实际上对他们有一些价值,所以我想确保它反映了"他们的"时间并且对他们有意义。
这是最佳实践还是更好的想法?
您无法从服务器中找到用户的时区。时期。
我强烈建议您使用UTC(从getutcdate()
)存储登录时间,因为它是明确的。如果使用本地时间,则夏令时转换会导致"重复小时数",其中对于相隔一小时发生的事件,将记录相同的时间。这使得无法确定事件实际发生的时间。
如果您不知道用户的时区,只需显示 UTC 并告诉用户它是 UTC,这样他们就不会感到困惑。
但是,如果您想知道用户的时区,则必须让客户端软件告诉您,也许是通过询问用户并将其存储在他的首选项中。或者,你可以从JavaScript中猜测。
另请参阅此问题,其中更详细地讨论了时区问题:
- 存储日期时间 (UTC) 与存储日期时间偏移量