1. 如何設置PHP時區?
常常存在PHP中date結果和系統時間不一致, (對於咱們最多見是慢8小時). 究其緣由, 中國處於東八區, 所在系統設置了時區, 可是PHP未設置時區. 那麼如何設置PHP時區? 有兩種方法:
1.1 php.ini中
date.timezone = [Asia/Shang|Asia/Chongqing|Etc/GMT-8|PRC]
1.2 date_default_timezone_set([Asia/Shang|Asia/Chongqing|Etc/GMT-8|PRC]);php
2. PHP中日期函數和時區
地理學中以格林尼治時間爲標準時間. Internet上使用該時間爲通用協調時(UTC, Universal Time Coordinated), 即: GMT(Greenwich Mean Time).
2.1 time(): 標準時間戳, 指返回自從Unix紀元 (格林威治時間1970-01-01 00:00:00) 到當前GMT標準時間的秒數, 與PHP系統設置的時區無關。
2.2 date(): 某GMT標準時間本地化"自定義格式"時間, 跟php系統設置的時區有關.
2.3 gmdate(): 某GMT標準時間的"自定義格式"時間, 跟php系統設置的時區無關.html
3. 假設我在北京, 想得到n天前凌晨的格式化時間. 簡化一下, 假設n=0, 當前時間爲中午12點. 求今天0點的格式化時間.
time(): 獲得當前GMT標準時間. 倫敦當前時間:(04:00:00).
time()+3600*8: 8小時後, GMT標準時間. 倫敦8小時後時間戳(12:00:00).
intval((time()+3600*8)/(3600*24))*(3600*24): GMT標準下, 本地時間的凌晨時間戳. 倫敦當日凌晨(00:00:00)
intval((time()+3600*8)/(3600*24))*(3600*24)-3600*8: GMT標準, 本地時間凌晨時間戳. 倫敦前一日(16:00:00)北京(00:00:00)
date('Y-m-d H:i:s', intval((time()+3600*8)/(3600*24))*(3600*24)-3600*8): 根據本地時區, GMT(16:00:00)PRC(00:00:00)
intval((time()+28800)/$g)*$g-28800轉換爲格式化日期. 即: today算法.
求n天前的凌晨時間:
date('Y-m-d H:i:s', intval((time()+3600*8-3600*24*n)/(3600*24))*(3600*24)-3600*8);
date('Y-m-d H:i:s', strtotime('today')-3600*24*n);算法
參考:
http://www.cnblogs.com/xmphoenix/archive/2011/06/30/2095022.html函數