繁体   English   中英

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

[英]What is the best way to handle timezone on PHP & MySQL?

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

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

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

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

谢谢。

MySQL服务器时区支持中所述

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

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

你正在思考正确的方向。

我不会使用服务器的时区。 而是使用协调世界时(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中获取它getTimezoneOffset(); 那么最好根据时区偏移量添加小时数。

我个人根据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回显的日期strtotime($row['some_date']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM