[英]What is the best way to handle timezone on PHP & MySQL?
我目前正在研究在我的网站上处理时区的最佳方法。 来自许多不同国家的人会同时访问它,我必须向他们展示基于时间的信息,所以我想:
根据我的服务器每次存储在数据库上(相同的时区,由PHP定义)然后,用户可以选择他的时区,我使用mysql函数DATEADD进行所需的转换。
这似乎工作正常,但我的问题是:
谢谢。
当前会话时区设置会影响区域敏感的时间值的显示和存储。 这包括由
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.