程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 時間與日期

PHP 時間與日期

編輯:關於PHP編程

PHP 時間與日期


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 字符 說明 返回值例子 日 --- --- d 月份中的第幾天,有前導零的 2 位數字 0131 D 星期中的第幾天,文本表示,3 個字母 MonSun j 月份中的第幾天,沒有前導零 131 l(L的小寫字母) 星期幾,完整的文本格式 SundaySaturday N ISO-8601 格式數字表示的星期中的第幾天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天) S 每月天數後面的英文後綴,2 個字符 stndrd 或者 th。可以和 j 一起用 w 星期中的第幾天,數字表示 0(表示星期天)到 6(表示星期六) z 年份中的第幾天 0365 星期 --- --- W ISO-8601 格式年份中的第幾周,每周從星期一開始(PHP 4.1.0 新加的) 例如:42(當年的第 42 周) 月 --- --- F 月份,完整的文本格式,例如 January 或者 March JanuaryDecember m 數字表示的月份,有前導零 0112 M 三個字母縮寫表示的月份 JanDec n 數字表示的月份,沒有前導零 112 t 給定月份所應有的天數 2831 年 --- --- L 是否為閏年 如果是閏年為 1,否則為 0 o ISO-8601 格式年份數字。這和 Y 的值相同,只除了如果 ISO 的星期數(W)屬於前一年或下一年,則用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003 Y 4 位數字完整表示的年份 例如:19992003 y 2 位數字表示的年份 例如:9903 時間 --- --- a 小寫的上午和下午值 ampm A 大寫的上午和下午值 AMPM B Swatch Internet 標准時 000999 g 小時,12 小時格式,沒有前導零 112 G 小時,24 小時格式,沒有前導零 023 h 小時,12 小時格式,有前導零 0112 H 小時,24 小時格式,有前導零 0023 i 有前導零的分鐘數 0059> s 秒數,有前導零 0059> u 毫秒 (PHP 5.2.2 新加)。需要注意的是 date() 函數總是返回 000000 因為它只接受 integer 參數, 而 DateTime::format() 才支持毫秒。 示例: 654321 時區 --- --- e 時區標識(PHP 5.1.0 新加) 例如:UTCGMTAtlantic/Azores I 是否為夏令時 如果是夏令時為 1,否則為 0 O 與格林威治時間相差的小時數 例如:+0200 P 與格林威治時間(GMT)的差別,小時和分鐘之間有冒號分隔(PHP 5.1.3 新加) 例如:+02:00 T 本機所在的時區 例如:ESTMDT(【譯者注】在 Windows 下為完整文本格式,例如Eastern Standard Time,中文版會顯示中國標准時間)。 Z 時差偏移量的秒數。UTC 西邊的時區偏移量總是負的,UTC 東邊的時區偏移量總是正的。 -4320043200 完整的日期/時間 --- --- c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00 r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200 U 從 Unix 紀元(January 1 1970 00:00:00 GMT)開始至今的秒數 參見 time()

 

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)

 




; // 當前時間到UNIX紀元的差值 echo time().
; // 格式化時間 echo date(Y-m-d H-i-s).
; // 時間數組 $arrays = getdate(); print_r($arrays).
; // 檢測時間 var_dump( checkdate(7, 9, 2015) );
; // 本地化時間戳,strtotime還可用於時間的大小比較 setlocale(LC_TIME, 0); echo strftime('%Y,%m,%d', strtotime('2000-04-00')).
; // 微妙 echo microtime(true); function run_time() { list($msec, $sec) = explode( , microtime()); return ((float)$msec + (float)$sec); } $start_time = run_time(); $time1 = strtotime(date( Y-m-d H:i:s)); $time2 = strtotime(2008-2-3 17:10:00); $time3 = strtotime(2008-8-8); $sub1 = ceil(($time2 - $time1) / 3600); //60 * 60 $sub2 = ceil(($time3 - $time1) / 86400); //60 * 60 * 24 echo 離放假還有 $sub1 小時!!! ; echo

; echo 離北京奧運開幕還有$sub2 天!!!; $end_time = run_time(); echo '耗時'.($end_time - $start_time); ?>

\

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved