关于在mysql中处理时间偏移的建议

时间:2009-04-22 02:30:36

标签: mysql timezone offset

将此项目提炼为最简单的术语;

  1. 用户单击一个按钮,记录的时间戳为NOW()。
  2. NOW()当然等于创建记录的服务器上的时间。
  3. 我需要根据他们的时区向他们展示统计数据,而不是我的。
  4. 在MySql中处理时区偏移的最佳方法是什么?是否存在旨在处理偏移量的特定字段格式?

    我需要按照以下方式运行:

       SELECT DATE_FORMAT(b_stamp, '%W') AS week_day, count(*) AS b_total, b_stamp
          FROM table
          WHERE
       (b_stamp >= DATE_SUB(NOW(), INTERVAL 7 DAY))
          AND
       (user_id = '$user_id') GROUP BY week_day ORDER BY b_stamp DESC
    

    我宁愿不询问用户他们所处的时区,我认为JS是将这些数据从浏览器中提取出来的唯一方法。也许如果他们在移动设备上,并且这不是基于网络的应用程序,我可以在那里得到它,但这可能不是这个方向。

    我正在考虑最好的方法是确定它们的偏移量,并将变量设置为“server_time”+/- their_offset。这使得服务器看起来好像位于不同的位置。我相信这是最好的,因为没有额外的+/-逻辑我需要添加到代码中,混淆它并使其变得丑陋。

    另一方面,它将数据放入数据库中,并带有全面的时间戳。

    建议?

2 个答案:

答案 0 :(得分:1)

您可以使用javascript从客户端获取时区,如下所示:

   var timeZone =(new Date()。gettimezoneOffset()/ 60)*( - 1);  

在使用之前打印变量并进行测试。我认为这将是你最简单的赌注。

答案 1 :(得分:0)

除了使用JS之外,您可以获取其IP地址的时区(使用类似ip2location的东西),然后使用MySQL的CONVERT_TZ()函数。