2017-01-17 81 views
4

我正在修改現有應用程序,它使用常量SERVER_TIMEZONE_OFFSET已被使用A LOT。我以前從來沒有遇到過這一點,我可以得到「SERVER_TIMEZONE_OFFSET」最接近的搜索是在PHP文件爲timezone_offset_get()功能PHP SERVER_TIMEZONE_OFFSET解釋

這裏是`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;"; 

這裏查詢的例子我試圖改變在一封它

//only adding $SQL row I changed which I changed from above code

$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 "; 

上面的查詢結果RROR消息只是在陳述你在你的SQL syntx附近date_default_timezone_set('Australia/Brisbane') . ") >

問題(S)

  1. 究竟是SERVER_TIMEZONE_OFFSET在上述背景的目的的錯誤?
  2. 我該如何編輯查詢SERVER_TIMEZONE_OFFSET接受date_default_timezone_set('Australia/Brisbane')顯然我的嘗試是不成功的,任何指針我出錯了?
  3. 有沒有可能的mysql語句替代SERVER_TIMEZONE_OFFSET我可以使用?

回答

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 
+0

謝謝你會放棄它並給予反饋 –

+0

非常感謝你非常豐富和有益的 –