strtotime(date("Y-m-01 00:00:00")); // 用來獲得本月的第一天時間戳
在實際PHP strtotime應用中突然有一次碰到轉換過來的時間比實際時間要慢了 8 小時!本以為是 php.ini中的
timezone 設置有誤導致,巡查了一圈最後把問題鎖定在了strtotime 函數上(linux服務器下往往會出問題,WINDOWS服務器返回的數據基本都是正確的)
仔細讀了下PHP手冊,發現第一個參數 time 有格式要求
time
The string to parse, according to the GNU » Date Input Formats syntax. Before PHP 5.0.0, microseconds weren't allowed in the time, since PHP 5.0.0 they are allowed but ignored.
通過對 Date Input Formats 的進一步跟進發現
$ LC_ALL=C TZ=UTC0 date
Mon Mar 1 00:21:42 UTC 2004
$ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ'
2004-03-01 00:21:42Z
$ date --iso-8601=ns | tr T ' ' # --iso-8601 is a GNU extension.
2004-02-29 16:21:42,692722128-0800
$ date --rfc-2822 # a GNU extension
Sun, 29 Feb 2004 16:21:42 -0800
$ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension.
2004-02-29 16:21:42 -0800
$ date +'@%s.%N' # %s and %N are GNU extensions.
@1078100502.692722128
發現我們常用的格式 yyyy-mm-dd HH:ii:ss 並不符合要求。大致看了下,決定采用UTC0 格式隨將以上代碼更新為以下代碼
strtotime(date("Y-m-01 00:00:00")."Z"); // 用來獲得本月的第一天時間戳
至此問題解決!
PHP strtotime應用總結:
我們在開發過程中有時候被系統的支持而忽略了一些細節。就如本例在WINDOWS平台下是不會有這問題,但PHP strtotime應用還是要按規范的走會好些。以避免出現這類問題。