設定時區:
1. 在 php.ini 設定檔更改date.timezone = PRC
2. bool date_default_timezone_set("PRC") 設定用於一個指令碼中所有日期時間函數的預設時區;
string date_default_timezone_get() 取得一個指令碼中所有日期時間函數所使用的預設時區;
3. string ini_set('date.timezone','PRC') ;
string ini_get ( string $varname )
Gets the value of a configuration option
Returns the value of the configuration option as a string on success, or an empty string on failure or for null values.
可以在 php.ini 下設定 date.timezone 鍵的值為 'Asia/Shanghai' 即可。但是通常共用虛擬機器主機本身沒有修改 php.ini 許可權。這個時候就應該在程式公用部分加入
ini_set('date.timezone','Asia/Shanghai');
PHP 5.1 以上提供了專門的函數修改對應的時區:
date_default_timezone_set('Asia/Shanghai');
對應 'Asia/Shanghai' 其他可以使用的大陸時區還有:Asia/Chongqing 、Asia/Shanghai 、Asia/Urumqi (依次為重慶,上海,烏魯木齊);港台地區可用:Asia/Macao、Asia/Hong_Kong、Asia/Taipei(依次為澳門,香港,台 北);還有新加坡:Asia/Singapore;其他可用的值是:Etc/GMT-8、Singapore、Hongkong、PRC;老外好像把北京 漏調了。
考慮是否是資料庫的問題。果不其然,因為程式插入的函數並沒有調用 PHP 的時間,而是直接使用 MySQL 的 CURRECT_TIMESTAMP。這個時候就要考慮是否能修改 MySQL 方面的時區。
參考了 MySQL 的文檔,發現一個可行的 SQL 陳述式為:
SET GLOBAL time_zone = '+8:00';
其中 '+8:00' 是東八區的表示方法,其他的市區依次類推。而我在資料庫模型中插入改語句發現許可權不夠(該死的虛擬機器主機供應商)。接下來我調試了很多語句,比如:
DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR);
顯示時區的 SQL 陳述式:
SHOW VARIABLES LIKE 'system_time_zone'
讓 PHP 插入當前正確的時間,這樣雖然程式方面需要做相應的修改。不過日後配置修改起來只要修改一處就可以了。最後插入資料庫的時間注意一下格式:
date('Y-m-d H:i:s')這樣就可以解決問題了。附,一些非常好的參考資料:
這樣就可以解決問題了。附,一些非常好的參考資料:
http://www.modwest.com/help/kb6-256.html
http://topic.csdn.net/t/20060503/07/4728521.html
http://www.phpchina.com/5173/viewspace_5132.html