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

标签 mysql sql timezone

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

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

例如,我在东部时间,所以我可以在他们的帐户个人资料上向他们显示 2013-09-04 02:46:05 EST,同时也让他们编辑时区以更正其显示,同时保留原始时间数据库中的预计日期(我的服务器配置 tz)。

我意识到向用户提供上次登录日期/时间似乎没什么用,但对于这个网站来说,它实际上对他们有一些值(value),所以我想确保它反射(reflect)了“他们的”时间并对他们有意义。

这是最佳实践还是更好的想法?

最佳答案

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

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

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

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

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

关于mysql - sql NOW() 并返回用户实际时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609155/

相关文章:

mysql - 连接两个表并获取一个表的计数,但所有结果都与另一个表上的 ID 匹配

java - 从 java.util.TimeZone 转换为 org.joda.DateTimeZone

javascript - getTimezoneOffset()减去后的时间戳引用是多少?

php - 当我点击 EDIT 链接时,同一页面中的编辑表单不会出现

ruby-on-rails - 使用 Date#to_time 方法时如何考虑时区

mysql - 当产品 ID 相同时将数据复制到列

php - 如何在 HTML 上保存民意调查获取和保存民意调查结果

mysql - 在 MySql/phpmyadmin 中创建存储过程

php - MySQL计算出多个列中最低的一个

sql - 如何通过每个客户端 ID 的组 ID 获取最小日期