在windows上,在預設的php配置下,date函式返回的時間值和當地時間總是相差8小時,即顯示的是格林威治時間。解決方案是正確設定php的時區環境。
php的時區環境通過一組特定的字串指定。參見php所支援的時區列表。
最省事的辦法是在php.ini檔案中找到date.timezone一行,預設情況下這一行是被注釋掉的,刪掉前面的分號即可啟用。對於中國大陸,可把它設定為etc/gmt-8(或asia/sanghai、asia/chongqing、asia/urumqi、prc)。-------------------------------------------這個方法我試了一下,還是有警告;
如果由於某種原因不能修改php.ini,可以在php程式裡用date_default_timezone_set()設定。例如,可以在使用date函式前先執行date_default_timezone_set('etc/gmt-8')。
我個人認為還是採用date_default_timezone_set函式比較好。一是通用性強,二來如果你的**是面向全球使用者的,這種方法可以讓每個使用者都能設定他所在的時區。
最後需要說明的是對於etc/gmt這種寫法。中國大陸採用的是東八區的時間,一般情況下都是記作+8,但php裡來了個大反個兒,要寫成etc/gmt-8;相反地,如果你的時區是西2區,在php裡就要寫成etc/gmt+2。這一點和常識不同,尤其要注意。
<?php輸出:echo("result with date():
");echo(date("l") . "
");echo(date("l ds \of f y h:i:s a") . "
");echo("oct 3,1975 was on a ".date("l", mktime(0,0,0,10,3,1975))."
");echo(date(date_rfc822) . "
");echo(date(date_atom,mktime(0,0,0,10,3,1975)) . "
");echo("result with gmdate():
");echo(gmdate("l") . "
");echo(gmdate("l ds \of f y h:i:s a") . "
");echo("oct 3,1975 was on a ".gmdate("l", mktime(0,0,0,10,3,1975))."
");echo(gmdate(date_rfc822) . "
");echo(gmdate(date_atom,mktime(0,0,0,10,3,1975)) . "
");?>
result with date():tuesday
tuesday 24th of january 2006 02:41:22 pm
oct 3,1975 was on a friday
tue, 24 jan 2006 14:41:22 cet
1975-10-03t00:00:00+0100
result with gmdate():
tuesday
tuesday 24th of january 2006 01:41:22 pm
oct 3,1975 was on a thursday
tue, 24 jan 2006 13:41:22 gmt
1975-10-02t23:00:00+0000
php中的date函式中時區問題
用php的朋友都可能遇到過這種情況。date y m d h i s 總和伺服器時間相差幾個 小時。網上查了才知道,原來從php5.1.0開始,php.ini裡加入了date.timezone這個選 項,預設情況下是關閉的,也就是顯示的時間 無論用什麼php命令 都是格林威治標 準時間,所以才會有這...
PHP中date函式的選項說明
date 將伺服器的時間格式化 語法描述為string date string format,int timestamp 返回值的資料型別是字串。函式說明 返回值的字串按配置的格式決定。字串格式化的選項如下 a am 或是 pm a am 或是 pm d 幾日,兩位數字,若不足則補零 從 01 至 ...
PHP中的Date 函式詳細講解
1,年 月 日 echo date y m j 2007 02 6 echo date y n j 07 2 6 大寫y表示年四位數字,而小寫y表示年的兩位數字 小寫m表示月份的數字 帶前導 而小寫n則表示不帶前導的月份數字。echo date y m j 2007 feb 6 echo date ...