PHP SERVER_TIMEZONE_OFFSET 解释

4

我正在修改一个现有的应用程序,该应用程序经常使用常量SERVER_TIMEZONE_OFFSET。我以前从未遇到过这种情况,而且在搜索“SERVER_TIMEZONE_OFFSET”时,最接近的结果是PHP文档中的timezone_offset_get()函数。

以下是一个查询示例,其中使用了`SERVER_TIMEZONE_OFFSET。

$sql = "select s.weekNum, count(s.gameID) as gamesTotal,";
$sql .= " min(gameDateTime) as firstGameTime,";
$sql .= " (select gameDateTime from schedule where weekNum = s.weekNum and DATE_FORMAT(gameDateTime, '%W') = 'Thursday' order by gameDateTime limit 1) as cutoffTime,";
$sql .= " (DATE_ADD(NOW(), INTERVAL " . SERVER_TIMEZONE_OFFSET . " HOUR) > (select gameDateTime from schedule where weekNum = s.weekNum and DATE_FORMAT(gameDateTime, '%W') = 'Sunday' order by gameDateTime limit 1)) as expired ";
$sql .= "from schedule s ";
$sql .= "group by s.weekNum ";
$sql .= "order by s.weekNum;";

这是我尝试修改它的方式

//只是添加了$SQL行,我已经从上面的代码中进行了更改

$sql .= " (DATE_ADD(NOW(), INTERVAL " . date_default_timezone_set('Australia/Brisbane') . ") > (select gameDateTime from schedule where weekNum = s.weekNum and DATE_FORMAT(gameTimeEastern, '%W') = 'Sunday' order by gameTimeEastern limit 1)) as expired ";

上述查询会导致一个错误信息,简单地指出在你的SQL语句中有一个错误,附近是date_default_timezone_set('Australia/Brisbane') . ") >

问题

  1. 在上下文中,SERVER_TIMEZONE_OFFSET的确切目的是什么?
  2. 我如何编辑查询SERVER_TIMEZONE_OFFSET以接受date_default_timezone_set('Australia / Brisbane'),我的尝试不成功,您有任何指针告诉我哪里错了吗?
  3. 是否有可能使用MySQL语句替代SERVER_TIMEZONE_OFFSET,我可以使用?
1个回答

1
INTERVAL " . SERVER_TIMEZONE_OFFSET . " HOUR) 

您可以在那里提供一个数字,该数字对应服务器时间和您期望看到的时间之间的小时差。
INTERVAL 5 HOUR
         ^ 

由于您了解两个时区,因此可以轻松告诉那个数字。请注意,为PHP设置的时区不一定意味着MySQL将具有相同的时区。如果您的MySQL服务器使用与应用程序期望的相同的时区,则可以从查询中简单地删除间隔子句

SERVER_TIMEZONE_OFFSET是一个应用程序级别的常量,在该应用程序中使用,并且仅表示一个数字。您可以根据上述差异自行调整该数字。

您不必改变所有使用该常量的查询。在您的PHP配置文件中,您只需定义常量值一次,您的查询就会从那里获取它。

define("SERVER_TIMEZONE_OFFSET",6);  // Or any number you see fit

谢谢,我现在会尝试并反馈。 - Timothy Coetzee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接