PHP 時間與日期

pm45e 9年前發布 | 46K 次閱讀 PHP PHP開發

      PHP提供了大量的內置函數,使開發人員在時間的處理上游刃有余,大大提高了工作效率。介紹一些常見的PHP日期和時間函數以及日期和時間的處理。


常用的日期和時間處理函數

函 數

</td>

說  明

</td> </tr>

checkdate

</td>

驗證時間函數,判斷時間是否有效,有效返回true,否則返回false

</td> </tr>

date_default_timezone_get

</td>

取得腳本日期時間函數所使用的默認時區

</td> </tr>

date_default_timezone_set

</td>

設定日期時間函數的默認時區

</td> </tr>

date

</td>

格式化一個本地時間/日期

</td> </tr>

getdate

</td>

獲取日期/時間信息

</td> </tr>

gettimeofday

</td>

獲取當前時間

</td> </tr>

localtime

</td>

獲取本地時間

</td> </tr>

microtime

</td>

返回當前時間戳和微秒數

</td> </tr>

mktime

</td>

取得一個UNIX時間戳

</td> </tr>

strtotime

</td>

將任何英文文本的日期時間描述解析為UNIX時間戳

</td> </tr>

time

</td>

返回當前的UNIX時間戳

</td> </tr> </tbody> </table>


系統時區設置

      在學習過程中發現通過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個部分:
      2  需要添加時間戳的文件用Hash編碼加密形成摘要。
      2  DTS接受文件的日期和時間信息。
      2  對接受的DTS文件加密。
      數字時間是由認證單位DTS來添加的,以DTS接收到文件的時間為依據。時間戳的作用原理是通過其他加密法將時間的數值轉換為加密的數值,時間變化后加密的數值也隨之變化。時間戳的優點是:變化的加密數值來防止數值被竊取后非法重復利用,也就起到了加密的作用。時間戳主要依賴于時間,在約定的一段時間內產生唯一的一個數值。


mktime()函數

      語法:
      int mktime(int hour, int minute, int month, int day, int year, int [is_dst])

  • 參  數

    </td>

    說  明

    </td> </tr>

    hour

    </td>

    小時數

    </td> </tr>

    minute

    </td>

    分鐘數

    </td> </tr>

    second

    </td>

    秒數(一分鐘之內)

    </td> </tr>

    month

    </td>

    月份數

    </td> </tr>

    day

    </td>

    天數

    </td> </tr>

    year

    </td>

    年份數

    </td> </tr>

    is_dst

    </td>

    參數is_dst在夏令時可以被設置為1,如果不是則設置為0;如果不確定是否為夏令時則設置為-1(默認值)

    </td> </tr> </tbody> </table>       注意:有效的時間戳典型范圍是格林尼治時間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);  //設置北京時間.

    </tr> </tbody>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr>

    </tr> </tbody> </table>

    getdate()函數

          該函數返回數組形式的日期時間信息,如果沒有時間戳,則以當前時間為準。

    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()

    元  素

    </td>

    說  明

    </td> </tr>

    seconds

    </td>

    秒,返回值0~59

    </td> </tr>

    minutes

    </td>

    分鐘,返回值為0~59

    </td> </tr>

    hours

    </td>

    小時,返回值為0~23

    </td> </tr>

    mday

    </td>

    月份中第幾天,返回值為1~31

    </td> </tr>

    wday

    </td>

    星期中第幾天,返回值為0(星期天)~6(星期六)

    </td> </tr>

    mon

    </td>

    月份數字,返回值為1~12

    </td> </tr>

    year

    </td>

    4位數字表示的完整年份,返回值加2000或2008

    </td> </tr>

    yday

    </td>

    一年中第幾天,返回值0~365

    </td> </tr>

    weekday

    </td>

    星期幾的完整文本表示,返回值為Sunday~Saturday

    </td> </tr>

    month

    </td>

    月份的完整文本表示,返回值為January~December

    </td> </tr>

    0

    </td>

    返回從UNIX紀元開始的秒數

    </td> </tr> </tbody> </table>

    比較兩個時間的大小

          在實際開發中經常遇到判斷兩個時間的大小,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)</span>
        <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>無標題文檔</title>
    </head>

    <body>  
    <?php  
        // 設置時區  
        date_default_timezone_set('Asia/Chongqing');  
    
        // 指定時間到UNIX紀元的差值  
        echo mktime(1, 2, 3, 4, 5, 2006)."<br>";  
    
        // 當前時間到UNIX紀元的差值  
        echo time()."<br>";  
    
        // 格式化時間  
        echo date("Y-m-d H-i-s")."<br>";  
    
        // 時間數組  
        $arrays = getdate();  
        print_r($arrays)."<br>";  
    
        // 檢測時間  
        var_dump( checkdate(7, 9, 2015) );  
    
        "<br>";  
    
        // 本地化時間戳,strtotime還可用于時間的大小比較  
        setlocale(LC_TIME, 0);  
        echo strftime('%Y,%m,%d', strtotime('2000-04-00'))."<br>";  
    
        // 微妙  
        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 "離放假還有<font color=red> $sub1 </font>小時!!!" ;   
        echo "<p>";  
        echo "離北京奧運開幕還有<font color=red>$sub2 </font>天!!!";  
        $end_time = run_time();  
        echo '耗時'.($end_time - $start_time);      
    ?>  
    </body>  
    </html>  </pre>來自:http://blog.csdn.net/aoshilang2249/article/details/46822105<br />
     本文由用戶 pm45e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
  • sesese色