strtotime在將一個潛在的時間字符串轉換爲正確的時間時,會使用到當前系統時區。如果系統時區與所給目標字符串所示時區不一樣時,那麼在調用後,其生成的時間將與想象中的時間有時間偏差。因此,需要在調用該方法前,首先確定當前系統時區。
我們可以調用date_default_timezone_get()獲取當前時區。通常默認的時區爲UTC也就是標準時區+0000;設置系統時區有兩種方式:
1、修改php.ini配置文件。
[Date]
; Defines the default timezone used by the date functions
;date.timezone =
將上述部分的date.tiemzone放開,並設置爲需要的時區
2、在需要設置時區的地方調用date_default_timezone_set()方法來設置時區。
下面我們就以"Sat May 14 22:35:44 +0800 2011"爲例進行說明。我們的目標是獲取其中的'22:35:44'時間。
可以看到'Sat May 14 22:35:44 +0800 2011'爲+0800時區,也就是所謂的北京時間了。那麼我們需要在strtotime該字符串前,確保系統時區爲北京時區。PHP中北京時區可以用PRC表示。如果是PHP5+也可用Asia/Shanghai或者Asia/Chongqing來設置。
這裏我們採用第二種方式來設置系統時區。我們的測試代碼如下:
顯示結果如下:
時間字符串 | Sat May 14 22:35:44 +0800 2011 |
當前時區 | UTC |
字符轉化後日期格式('r') | Sat, 14 May 2011 14:35:44 +0000 |
字符轉化後日期格式('H:i:s') | 14:35:44 |
時間字符串 | Sat May 14 22:35:44 +0800 2011 |
當前時區 | Asia/Shanghai |
字符轉化後日期格式('r') | Sat, 14 May 2011 22:35:44 +0800 |
字符轉化後日期格式('H:i:s') | 22:35:44 |
注意: 在使用第二種方式時,在使用完成後,應將系統時區還原到初始設置。避免後續調用錯誤。
PS: 其他的時區設置及代碼中涉及到的方法,可以通過查看PHP API瞭解更多的用法。http://www.php.net/manual/zh/index.php