PHP提供了大量的內置函數,使開發人員在時間的處理上游刃有余,大大提高了工作效率。介紹一些常見的PHP日期和時間函數以及日期和時間的處理。
常用的日期和時間處理函數
函 數
說 明
checkdate
驗證時間函數,判斷時間是否有效,有效返回true,否則返回false
date_default_timezone_get
取得腳本日期時間函數所使用的默認時區
date_default_timezone_set
設定日期時間函數的默認時區
date
格式化一個本地時間/日期
getdate
獲取日期/時間信息
gettimeofday
獲取當前時間
localtime
獲取本地時間
microtime
返回當前時間戳和微秒數
mktime
取得一個UNIX時間戳
strtotime
將任何英文文本的日期時間描述解析為UNIX時間戳
time
返回當前的UNIX時間戳
系統時區設置
在學習過程中發現通過date()函數獲取到的時間跟本地時間不一樣,這是由於PHP5對date()函數進行了重寫,因此,目前的日期時間函數比系統時間少8個小時。在PHP語言中默認設置的是標准的格林威治時間(即采用的是零時區)。更改PHP語言中的時區設置主要有以下兩種方法:
1. 修改php.ini文件中的設置,找到[date]下的;date.timezone = 選項,將該項修改為date.timezone=Asia/Hong_Kong,然後重新啟動apache服務器。
2. 在應用程序中,使用時間日期函數之前添加如下函數:
date_default_timezone_set(“Asia/Hong_Kong”);設置完成後,date()函數就可以正常使用了,不會再出現時差問題。
UNIX時間戳
時間戳是文件屬性中的創建、修改、訪問時間。數字時間戳服務(digital time stamp service, DTS)是web網站安全服務項目之一,能提供電子文件的日期和時間信息的安全保護。
時間戳是一個經加密後形成後的憑證文檔,它包括3個部分:
² 需要添加時間戳的文件用Hash編碼加密形成摘要。
² DTS接受文件的日期和時間信息。
² 對接受的DTS文件加密。
數字時間是由認證單位DTS來添加的,以DTS接收到文件的時間為依據。時間戳的作用原理是通過其他加密法將時間的數值轉換為加密的數值,時間變化後加密的數值也隨之變化。時間戳的優點是:變化的加密數值來防止數值被竊取後非法重復利用,也就起到了加密的作用。時間戳主要依賴於時間,在約定的一段時間內產生唯一的一個數值。
mktime()函數
語法:
int mktime(int hour, int minute, int month, int day, int year, int [is_dst])
參 數
說 明
hour
小時數
minute
分鐘數
second
秒數(一分鐘之內)
month
月份數
day
天數
year
年份數
is_dst
參數is_dst在夏令時可以被設置為1,如果不是則設置為0;如果不確定是否為夏令時則設置為-1(默認值)
注意:有效的時間戳典型范圍是格林尼治時間1901年12月13日20:45:54~2038年1月19日03:13:07(此范圍符合32位有符號整數的最小值和最大值)。在Windows系統中此范圍限制為從1970年1月1日~2038年1月19日。
date()函數
date(string format,int timestamp)
該函數將返回參數timestamp按照指定格式而產生的字符串。其中參數timestamp是可選的,如果省略,則使用當前時間。format參數可以使開發人員按其指定的格式輸出時間日期。
date_default_timezone_set(PRC); //設置北京時間.
format
字符
getdate()函數
該函數返回數組形式的日期時間信息,如果沒有時間戳,則以當前時間為准。
元 素
說 明
seconds
秒,返回值0~59
minutes
分鐘,返回值為0~59
hours
小時,返回值為0~23
mday
月份中第幾天,返回值為1~31
wday
星期中第幾天,返回值為0(星期天)~6(星期六)
mon
月份數字,返回值為1~12
year
4位數字表示的完整年份,返回值加2000或2008
yday
一年中第幾天,返回值0~365
weekday
星期幾的完整文本表示,返回值為Sunday~Saturday
month
月份的完整文本表示,返回值為January~December
0
返回從UNIX紀元開始的秒數
比較兩個時間的大小
在實際開發中經常遇到判斷兩個時間的大小,PHP中的時間是不可以直接來進行比較的。所以,首先要將時間輸出為時間戳的格式,然後再進行比較,這是常用到的方法。
有兩個函數都可以實現這個功能,這裡使用strtotime()函數,該函數可以將任何英文文本的日期時間描述解析為UNIX時間戳。 該函數的語法為:
int strtotime(string time, int now)
該函數有兩個參數。如果參數time的格式是絕對時間,則now參數不起作用;如果參數time的格式是相對時間,那麼其對應的時間就是參數now來提供的,如果沒有提供參數now,對應的時間就是當前時間。如果解析失敗,則返回-1.
計算頁面腳本的運行時間
在浏覽網站時,經常會用到搜索引擎,在搜索信息時,細心的用戶會發現,在搜索結果的最下方,一般都有“搜索時間為……秒”的字樣。這裡使用到了microtime()函數,該函數返回當前UNIX時間戳和微秒數。返回格式為msec sec的字符串,其中sec是當前的UNIX時間戳,msec為微秒數。該函數的格式為:
string microtime(void)
; echo 離北京奧運開幕還有$sub2 天!!!; $end_time = run_time(); echo '耗時'.($end_time - $start_time); ?>