PHP5的php.ini時區設置問題
從php5.1.0開始,php.ini里加入了date.timezone這個選項,默認情況下是關閉的,也就是顯示的時間(無論用什麼php命令)都是格林威治標準時間,和我們的時間(北京時間)差了正好8個小時,有以下3中方法可以恢復正常的時間。
1、最簡單的方法就是不要用php5.1以上的版本;
2、如果要用5.1以上版本,而且不修改php.ini,則需要在關於時間的初始化的語句的上面加上date_default_timezone_set (XXX),或者使用date(‘Y-m-d G:i:T’, strtotime(‘+8HOUR’) )來獲取日期時間;
3,一勞永逸,僅限能修改php.ini。打開php.ini把date.timezone前面的分號去掉,在=後面加XXX,重啟http服務(如apache2或iis等)即可。
關於XXX,大陸內地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi(依次為重慶,上海,烏魯木齊),港臺地區可用:Asia/Maca* ,Asia/Hong_Kong ,Asia/Taipei(依次為澳門,香港,臺北),還有新加坡:Asia/Singapore,以上沒有北京,不過接著往下看,其他可用的值是:Etc/GMT-8,Singapore ,Hongkong,PRC。PRC是什麼?PRC是中華人民共和國啊!(這個就是北京時間吧)以上都是php官方說明檔里整理出來的GMT-8下面的地區,可能會有遺漏,如有需要再上官方文檔里查看一下比較好:)
今天在PHP5下用date(“H:i:s")時,發現參數"H"取出的時間與window下的時間不對。查了一下資料,發現是PHP5的php.ini里面默認設置為:
[Date]
; Defines the default timezone used by the date functions
;date.timezone =
如此一來,按照默認的時間便為GMT時間。而我們一般是使用北京時間,可以設置為:date.timezone = PRC或date.timezone = Asia/Shanghai。即:
[Date]
; Defines the default timezone used by the date functions
date.timezone = Asia/Shanghai
記得不要設置為"Asia/Beijing",老外好象對上海感興趣點,呵呵。
如果沒有權限改php.ini,可以用函數date_default_timezone_set(‘PRC’);或date_default_timezone_set(‘Asia/Shanghai’);
這個函數用於設定所有日期時間函數的默認時區。手冊上如此說明:“自 PHP 5.1.0 起(此版本日期時間函數被重寫了),如果時區不合法則每個對日期時間函數的調用都會產生一條 E_NOTICE 級別的錯誤信息”。但是“本函數永遠返回 TRUE(即使 timezone_identifier 參數不合法)。”
在此再學習一下函數:string date_default_timezone_get ( void )。這個函數的目的是取得一個腳本中所有日期時間函數所使用的默認時區。
這個函數的返回值遵循以下順序:
1:用 date_default_timezone_set() 函數設定的時區(如果設定了的話)。
2:TZ 環境變量(如果非空)。
3:date.timezone 配置選項(如果設定了的話)。
4:自己推測(如果操作系統支持)。
5:如果以上選擇都不成功,則返回 UTC
再深入學習一下什麼是UTC:
協調世界時(UTC):
一種稱為協調世界時的折衷時標於1972年面世。為了確保協調世界時與世界時(UT1)相差不會超過0.9秒,有需要時便會在協調世界時內加上正或負閏秒。因此協調世界時與國際原子時(TAI)之間會出現若干整數秒的差別。位於巴黎的國際地球自轉事務中央局(IERS)負責決定何時加入閏秒。
UTC = Coordinated Universal Time. 中文名稱為協調世界時.
GMT = Greenwich Mean Time. 中文名稱為格林尼治(平)時(這里的"w"是不發音的,而且"Green"要讀成"Gren")
UTC = GMT +/- 0.9 s
因此 UTC 間中需要進行 “閏秒" 以控制兩者相差。
php5.1x的時區問題導致相差八個小時!收藏
從php5.10開始,php中加入了時區的設置,在php中顯示的時間都是格林威治標準時間,這就造成了我們中國的用戶會差八個小時的問題!
相關設置是修改php.ini中的 date.timezone 參數:
[Date]
; Defines the default timezone used by the date functions
;date.timezone =
默認是關閉的,只需把注釋去掉,改為即可
[Date]
; Defines the default timezone used by the date functions
date.timezone = PRC
其中PRC是“中華人民共和國”!
其他選項可以參考php手冊。
不過這上面的亞洲地區漏掉了我們的首都北京,不知道老外是不是故意的!
如果沒有修改php.ini的權限,只需要在調用時間日期函數的時候,調用 date_default_timezone_set(’PRC’) 即可!
也可以調用date_default_timezone_get()來查看當前的時區設置!
關於XXX,大陸內地可用的值是:
Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次為重慶,上海,烏魯木齊)
港臺地區可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次為澳門,香港,臺北)
臺灣地區可設為:date.timezone = Asia/Taipei (or date.timezone = “Asia/Taipei")
還有新加坡:Asia/Singapore
摘自dedecms :php5 時區設置
if(PHP_VERSION > ‘5.1’) {
$time51 = ‘Etc/GMT’.($cfg_cli_time > 0 ? ‘-‘ : ‘+’).abs($cfg_cli_time);
function_exists(‘date_default_timezone_set’) ? @date_default_timezone_set($time51) : “;
}
如果php版本大於5.1執行
$cfg_cli_time = -8;意思就是少8個小時!格式化後用data_default_timezone_set(“Etc/GMT+8″)設置!!
北京時區應該是Etc/GMT+8
時區設置 一般都設置成+8個小時!
是格林威治標準時(GMT)
$date = gmdate(“Y-m-d H:i:s",time()+8*3600)
只要滿足加8個小時就可以!寫成函數或者什麼..就隨便了