當前位置:首頁 > PHP教程 > php日期 > 列表

php系統時區設置方法總結

發布:smiling 來源: PHP粉絲網  添加日期:2015-04-11 17:02:56 瀏覽: 評論:0 

php時區是一個非常有意思的問題,安裝好apache+php環境之后會發現我們使用date函數獲取的日期都與中國時間有8小時區別了,那么這個時區問題要如何解決呢?下面本人整理了一些關于php時區設置方法,有需要的朋友可進入參考.

時區劃分

整個地球分為24個時區,每個時序都有自己的本地時間,同一時間,每個時區的本地時間相差1到23個小時,例如,英國倫敦本地時間與北京本地時間相差8個小時,在國際無線電通信領域,使用一個統一的時間,稱為通用協調時間(UTC,Universal Time Coordinated),UTC與格林威治標準時間(GMT,Greenwich Mean Time)相同,都與英國倫敦的本地時間相同

時區設置

由于PHP5.0對data()函數進行了重寫,因此,目前的日期時間函數比系統時間少8個小時。在PHP語言中默認設置的是標準的格林威治時間(即采用的是零時區),所以要獲取本地當前的時間必須更改PHP語言中的時區設置。

更改PHP語言中的時區設置有兩種方法:

(1)修改php.ini文件中的設置,找到[date]下的“;date.timezone=”選項,將其修改為“date.timezone=Asia/Hong_Kong”,然后重新啟動Apache服務器。

修改PHP.ini這個文件,找到date.timezone這行,去掉前面的分號,改成:

date.timezone = Asia/Shanghai

修改 .htaccess文件,修改.htaccess文件有兩種辦法,下面的兩條語句只要有一條即可:

php_value date.timezone Asia/Shanghai

SetEnv TZ Asia/Shanghai

(2)在應用程序中,在使用時間日期函數之前添加如下函數:

  1.  date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai'   亞洲/上海 
  2.  date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'為“亞洲/重慶” 
  3.  date_default_timezone_set('PRC');//其中PRC為“中華人民共和國” 
  4. i ni_set('date.timezone','Etc/GMT-8'); 
  5.  ini_set('date.timezone','PRC'); 
  6.  ini_set('date.timezone','Asia/Shanghai'); 
  7.  ini_set('date.timezone','Asia/Chongqing'); 
  8. date_default_timezone_set('PRC'); 
  9. //PRC為中華人民共和國時區 
  10. //或者 
  11. <?php  
  12.     date_default_timezone_set("Asia/Kolkata");  
  13.     echo date('d-m-Y H:i:s'); //Returns IST  
  14. ?> 

參數為PHP可識別的時區名稱,如果時區名稱PHP無法識別,則系統采用UTC時區,在PHP手冊中提供了各個時區名稱列表,其中,設置我國北京時間可以使用的時區包括:PRC(中華人民共和國)、Asia/Chongqing(重慶)、Asia/Shanghai(上海)或者Asia/Urumqi(烏魯木齊),這幾個時區名稱等效的.

設置完成后,date()函數便可以正常使用,不會再出現時差問題.

輸出系統的當前時間:

上面是一種設置系統當前時間的方法,在這里將采用另外一種方式設置系統當前的時間,即直接在date()函數之前通過date_default_timezone_set()函數設置系統的時區,并輸出系統當前的日期和時間,代碼如下:

  1. <?php 
  2. echo "UTC時間:".date("Y-m-d H:i:s");  //顯示默認的UTC時間 
  3. date_default_timezone_set("PRC");      //使用中華人民共和國的時區 
  4. echo "<br>"
  5. echo "北京時間:".date("Y-m-d H:i:s");  //輸出北京時間 
  6. echo "<br>"
  7. echo "中文時間:".date("Y年m月d日 H時i分s秒");  //輸出中文格式時間 
  8. echo "<br>";  //開源軟件:phpfensi.com 
  9. echo "當前時區:".date_default_timezone_get();   //獲取當前時區 
  10. ?> 

測試,代碼如下:

  1. <?php 
  2. date_default_timezone_set(‘Etc/GMT’); 
  3. //在輸出時間之前設置時區,Etc/GMT為時間標準時間 
  4. echo(time());  //開源軟件:phpfensi.com 
  5. echo(‘ 
  6. ’); 
  7. echo date(‘Y-m-d H:i:s’, time()); 
  8. echo(‘ 
  9. ’); 
  10. echo gmdate (“Y-m-d H:i:s”, time()); 
  11. echo(‘ 
  12. ’); 
  13. date_default_timezone_set(‘PRC’); 
  14. //在輸出時間之前設置時區,PRC為中華人民共和國 
  15. echo(time()); 
  16. echo(‘ 
  17. ’); 
  18. echo date(‘Y-m-d H:i:s’, time()); 
  19. echo(‘ 
  20. ’); 
  21. echo gmdate (“Y-m-d H:i:s”, time()); 
  22. ?> 
  23. //結果: 
  24. 1276257131 
  25. 2010-06-11 11:52:11 
  26. 2010-06-11 11:52:11 
  27. 1276257131 
  28. 2010-06-11 19:52:11 
  29. 2010-06-11 11:52:11 

結論:time():標準時間戳

指返回自從 Unix 紀元(格林威治時間 1970 年 1 月 1 日 00:00:00)到當前時間(指的是當前GMT標準時間)的秒數,它的值跟php系統設置的時區無關.

date():返回的是當前 GMT標準時間的本地化時間的“自定義格式”時間,跟php系統設置的時區有關.

gmdate():返回的是當前 GMT標準時間的“自定義格式”時間,跟php系統設置的時區無關.

unix時間戳:指的是當前(GMT標準)時間離unix紀元時間(1970-01-01 00:00:00)的秒數.

  1. date_default_timezone_set(‘Etc/GMT’); 
  2. //在輸出時間之前設置時區,Etc/GMT為時間標準時間 
  3. echo(strtotime(’1970-01-01 08:00:00′)); 
  4. echo(‘ 
  5. ’); 
  6. date_default_timezone_set(‘PRC’); 
  7. //在輸出時間之前設置時區,PRC為中華人民共和國 
  8. echo(strtotime(’1970-01-01 08:00:00′)); 
  9. ?> 
  10. //測試結果: 
  11. 28800 

strtotime(a):當前時間的GMT標準時間的unix時間戳,如果當前php系統的設置的時區不是GMT標準時區,則在應用strtotime(a)時,系統會自動把時間a折算成相應的GMT標準時間,然后計算這個時間的unix時間戳,跟php系統設置的時區有關.

Tags: php系統時區 php系統時間

分享到:

广西快3最大遗漏值统计表