PHP中date函式時差問題的解決

2021-08-30 06:51:50 字數 1711 閱讀 8675

在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 ...