PHP SERVER_TIMEZONE_OFFSET解释

我正在修改使用常量SERVER_TIMEZONE_OFFSET使用A LOT的现有应用程序.我之前从未遇到过这种情况,我可以获得的’SERVER_TIMEZONE_OFFSET’最接近的搜索是在 PHP Docs中为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 syntx在date_default_timezone_set(‘Australia / Brisbane’)附近有错误. “)>

问题(S)

>上面的上下文中SERVER_TIMEZONE_OFFSET的目的究竟是什么?
>如何编辑查询SERVER_TIMEZONE_OFFSET以接受date_default_timezone_set(‘澳大利亚/布里斯班’)显然我的尝试不成功,我出错的任何指针?
>是否有可能使用的SERVER_TIMEZONE_OFFSET替代MysqL语句?

解决方法

INTERVAL " . SERVER_TIMEZONE_OFFSET . " HOUR)

您只需提供一个数字,该数字对应于服务器时间与您希望看到的时间之间的小时数差异.

INTERVAL 5 HOUR
         ^

由于您知道两个时区,因此您可以轻松地告知该号码.请注意,为PHP设置的时区并不一定意味着MysqL将具有相同的时区.如果您的MysqL服务器使用与您的应用程序所期望的相同的时区,则只需从查询删除interval子句即可

SERVER_TIMEZONE_OFFSET是在该应用程序中使用的应用程序级别常量,并且仅代表它的外观中的数字.您可以根据之前解释的差异自行调整该数字.

您不一定要更改使用该常量的所有查询.在PHP配置文件中,您只需定义一次常量值,您的查询就会从那里选择它.

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...