PHP和PHP处理时区的最佳方法是什么? MySQL的?

时间:2012-08-31 03:31:15

标签: php mysql timezone

我目前正在研究在我的网站上处理时区的最佳方法。来自许多不同国家的人会同时访问它,我必须向他们展示基于时间的信息,所以我想:

根据我的服务器每次存储在数据库上(相同的时区,由PHP定义) 然后,用户可以选择他的时区,我使用mysql函数DATEADD进行所需的转换。

这似乎工作正常,但我的问题是:

  • 这是最好的方式吗?
  • DATEADD是处理小时差异最有效的功能吗?

感谢。

3 个答案:

答案 0 :(得分:7)

MySQL Server Time Zone Support中所述:

  

当前会话时区设置会影响区域敏感的时间值的显示和存储。这包括NOW()CURTIME()等函数显示的值,以及TIMESTAMP列中存储和检索的值。 TIMESTAMP列的值将从当前时区转换为UTC以进行存储,并从UTC转换为当前时区以进行检索。

因此,如果您使用TIMESTAMP类型列,MySQL将自动为您处理时区转换:只需在其time_zone变量中为会话设置适当的时区。

答案 1 :(得分:2)

你正在思考正确的方向。

我不会使用服务器的时区。而是使用协调世界时(UTC)时间。这是世界时间标准。这与格林威治标准时间(格林威治标准时间)几乎相同。请注意,UTC不会随夏令时变化。

要在PHP中使用,请参阅:http://php.net/manual/en/function.gmdate.php

从这里,您可以通过以下方式添加小时:http://www.php.net/manual/en/datetime.add.php

或根据用户偏好设置时区:http://www.php.net/manual/en/datetime.settimezone.php

您使用的是基于如何获得用户的时区。如果您要求它们(最准确),您可以在用户从组合框中选择时在PHP中设置时区。如果您使用getTimezoneOffset();使用JavaScript从标头中获取,则最好根据时区偏移量添加小时数。

答案 2 :(得分:0)

我个人根据GMT +0.00时区在我的数据库中设置所有时间。例如,当我想添加当前时间时,我会使用UTC_TIMESTAMP()(或UTC_DATE()UTC_TIME() - 以适用者为准)。这是独立于服务器的,所以我很有信心,即使我改变我的服务器,我也不需要担心这个问题。

然后选项是,如果您的访问者有机会选择自己的时区,您可以使用DATE_ADD()DATE_SUB()函数格式化结果,然后再提供结果。

否则,如果您有机会(这是我最喜欢的解决方案),您可以使用Javascript格式化该日期/时间,您可以通过

等方式轻松处理
function getLocalDate(dt) {
    var d = new Date(0);
    d.setUTCSeconds(dt);
    return d.toLocaleDateString();
    // or in some format that you choose
}

使用strtotime($row['some_date']);获取PHP回显的日期。