簡體   English   中英

同步PHP和MySQL時區

[英]Synchronize PHP and MySQL Timezones

我通過PHP獲得的時區是使用以下代碼的UMT

$timezone = date_default_timezone_get(); // UTC
echo "The current server timezone is: " . $timezone."<br />";
echo date('Y-m-d H:i:s');   //  2015-04-10 00:08:05

和MySQL給我pkt作為我的系統時區和時間2015-04-10 05:14:38

SELECT @ @system_time_zone // pkt
SELECT NOW( ) , UNIX_TIMESTAMP( NOW( ) ) // 2015-04-10 05:14:38

由於這個時差,我無法使用PHP從數據庫中獲取正確的記錄。

如何同步PHP和MySQL時區,以便兩者都返回相同的時間?

是否可以使用PHP更改MySQL的時區?

我已經嘗試過 ,但是出現了這個錯誤:

Warning: PDO::__construct(): The server requested authentication method unknown to the client

您可以使用mysql的功能

CONVERT_TZ(timestamp_field,[mysql_timezone],[php_timezone])

或更改php中的服務器時區:

date_default_timezone_set([timezone]);

PHP的date_default_timezone_set

或更改mysql時區:

SET GLOBAL time_zone = [timezone]

該語句將更改mysql的時區,但是如果重新啟動服務器,它將使用默認時區。 您可以在啟動時設置默認時區,這里是鏈接: 設置默認時區mysql

希望能有所幫助

我的網站要求以非常復雜的方式在mysql和PHP之間進行同步。 該網站提供了一個演示系統-或-遍及全球的完整USER在線辦公室。 該服務器位於美國EST,我位於澳大利亞EST。 用戶可以在任何地方。 因此,用戶登錄可以來自任何地方。 考慮到這一點,我無法設置MySQL或PHP時區,因為USER可能位於歐洲/倫敦,但服務器位於美國/東部。 為了克服這個問題,我發現在將數據加載到MySQL表時不能使用NOW(),CURDATE()或任何其他MySQL函數。 因此,我使用的每個PHP程序都有一個標頭,該標頭設置適當的時區PLUS變量以適應我通常會使用的任何MySQL函數。 當將MySQL數據加載到表中時,我將使用PHP變量而不是MySQL函數:
$mytime = date("Y:m:dh:m:s"); // for MySQL NOW() $myymd = date(""); // for MYSQL CURDATE()

這很繁瑣,但是可以確保加載到MySQL的任何日期/時間都與該用戶下次從該TIMEZONE加載該程序的預期時間保持同步。 當USER使用任何PHP程序/腳本作為其數據庫時,總是在PHP中設置該USER的時區:

date_default_timezone_set([timezone]);

作為USER登錄過程的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM