【问题标题】:PHP MySQL 24h Query outputs 24h +10hPHP MySQL 24h 查询输出 24h +10h
【发布时间】:2013-03-24 23:49:50
【问题描述】:

我在 php 脚本中运行以下 SQL 查询:

SELECT DATE_FORMAT(LogDateTime, '%k:%i') AS LogDate, Temp AS OutsideTemp, InsideTemp 
FROM cumuluslog.monthly 
WHERE LogDateTime > DATE_SUB(NOW(), INTERVAL 24 HOUR)
ORDER BY LogDateTime

问题是,我得到的不是过去的 24 小时,而是大约 34 小时,我检查了我的时区是否设置为 +10(我的本地时区)。当直接从 phpmyadmin 运行相同的查询时,它给了我正确的结果。

我尝试在 .php scriot 中设置时区:date_default_timezone_set('Australia/Brisbane );

似乎它正在运行最后一天的查询,然后在之后添加 +10 h 时区。我已经四处搜索,但似乎找不到有同样问题的人。

【问题讨论】:

  • SELECT @@global.time_zone, @@session.time_zone;检查mysql时区
  • 它带有@@global.time_zone SYSTEM,@@session.time_zone SYSTEM。
  • 谢谢达贡,这让我走上了正确的道路。

标签: php sql time timezone


【解决方案1】:

听起来您的 MySQL 服务器设置了错误的时区。您可以正确设置系统时间并重新启动 MySQL,或者告诉它在运行时使用哪个区域:

mysql_query("SET time_zone = 'Australia/Brisbane'");
mysql_query("YOUR QUERY HERE");

【讨论】:

  • 我确实尝试使用 SET time_zone 命令设置时区,但我没有意识到您已经在每个查询或会话中都这样做了。由于使用数据库有多种用途,因此正确设置系统时区并重新启动可能是一个想法。因为这是目前在 Windows 上运行的 XAMPP 服务器,它只是 PC 时区设置吗?还是有我需要编辑的 conf 文件?
  • 编辑:这确实解决了问题,事实证明我在代码中做了一些愚蠢的事情。现在一切正常,谢谢 Cal!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
相关资源
最近更新 更多