0

我在使用 php 或 mysql 的夏季 GMT +02:00 和冬季 GMT +01:00 时间时遇到问题

在 php.ini date.timezone = '欧洲/布拉格'

php 和 mysql 工作方式相同,通过这种方式 ->

所以strtotime('20120101000000') returns 1325372400 因为 strtotime 使用本地时间,同时strtotime('20120101000000 UTC')返回正确的值1325376000

但对我来说没有什么是正确的,例如:当用户在 2012 年 1 月 30 日 00:30 收到钱并且我在没有 UTC 的情况下通过 strtotime 存储它时......但是当我在冬季阅读它时,我会看到 23:30 30.6.2012 ....因为我的 GMT +小时已更改

所以我尝试将本地时间设置为 UTC 并仅使用 UTC ......但这意味着,我必须更改系统时间并添加时间(格林威治标准时间 +02:00)现在一切正常

但必须停止 NTP 同步...因为我需要使用 GMT +02:00 增加的时间

你能帮我吗,如果存在另一个出色的解决方案或者如何将 NTP 同步设置增加 2 小时

下一个问题是,该网络服务器说您的时间(增加 2 小时是格林威治标准时间......但事实并非如此)

4

1 回答 1

2

在 PHP 中,您可以使用函数 date_default_timezone_set http://php.net/manual/en/function.date-default-timezone-set.php在脚本中设置时区

在 mysql 中,时区将默认为您的计算机/服务器的系统时间。您可以通过以下方式了解如何更改此设置:

http://dev.mysql.com/doc/refman//5.5/en/time-zone-support.html

或者使用 mysql,您可以使用以下命令在每个查询的基础上执行此操作:

CONVERT_TZ()
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

最好通过将所有数据转换为单个 TZ 来处理时区,最好是一个不易受夏令时影响的 TZ。GMT 或 UTC 是最佳实践。您可以在需要时将查询结果转换为所需的 TZ。或者,您可以使用 linux 时间戳(php: time()、strtotime()、Mysql: UNIX_TIMESTAMP),然后在需要时将这些值转换为人类可读的字符串。

希望这可以帮助。

于 2012-07-04T05:49:16.400 回答