1
2
3
4
5
6
7
8
9
10
11

時(shí)間日期函數

發(fā)布時(shí)間:2017-07-20 08:04&水就nbsp;  發(懂電fā)布人:毛書朋   遠民 浏覽次數:6716

 

關聯課件:8子項目八 -時(shí)間日期函數技日(點擊在線預覽)

 

 

     8.3.4&nbs光水p; 時(shí)間日期函數

 

8.3.4.1 時(shí)間日期函數概述    

     朋林;     信音;     &nb學海sp;     視雜      姐些   科站      &機離nbsp;   &拿暗nbsp;  

時(shí)間日期函數用來獲取服務器的靜習時(shí)間和日期,或對(duì)時(shí)間日期類如視型的數據進(jìn)行各種(zh喝子ǒng)處理,來滿足程序的需要。在編程中時(電嗎shí)常要用到時(shí)間日期,如信息發(fā)布時(shí)記錄發(慢對fā)布的時(shí)間,用戶注冊時(sh廠船í)要記錄注冊的時(shí)間,記錄用戶進(jìn)行某些操作志化的時(shí)間等。PHP 5提供的時(shí)間日期函數如表8-3所示:

8-3.1.png

 

8-3.2.png

     長問   通過(guò)表8-3可以看到,PHP提供了很多函數實現各種(zhǒng)時輛也(shí)間/日期操作。其中不乏很有趣的函數,如返回某給定日期與地點的日出/日南麗落時(shí)間。不過(guò)其中部分函數并沒(méi)有很視森大的實用價值,隻需要熟練掌握其中幾個函數的樹讀使用,即可實現絕大多數常見的應用。

 

     湖媽   去開;8.3.4.2  獲取當前時(shí)間短廠的Unix時(shí)間戳

 

    &nb姐視sp;   很多讀者可能(néng)不票頻明白什麼(me)是Unix時(shí)間戳。Unix時(shí)關又間戳是指從Unix紀元(格林威治時(shí)間1970年1月1日00時(s報海hí)00分00秒)開(kāi)始到當前時(shí)間爲視畫止相隔的秒數。因此很顯然Unix時(shí)離微間戳應該代表一個很大的整數。Unix時(shí)間戳在很多時(shí身業)候非常有用,尤其在對(duì)時(shí)間進(jìn)行加減時(我亮shí)作用最爲明顯。如當前時(shí)間是“2006年10月10日10點師輛10分10秒”,在這(zhè)個時(shí)間基礎上加上25天劇好8小時(shí)55分58秒,會(快少huì)得到一個什麼(me)時(shí)間呢?可能(néng)推算起報答(qǐ)來比較複雜。因爲除了時(shí)間進冷廠(jìn)位以外,還(hái)涉及到不同月份天數可能(néng)不同(姐站可能(néng)是28天、29天、30天、日就31天)。所以用數學(xué)方法直接加減是不行的。如果使用Unix時(shí愛黑)間戳,在第一個時(shí)間的基礎上加上一定的秒數,得到的就(司弟jiù)是第二個時(shí)間的Unix時(shí)間戳。些少然後(hòu)用PHP的有關函數黑如把這(zhè)個時(shí)間戳轉換成(chéng)普通時(shí)懂在間格式顯示即可。

  &nb業視sp;     PH什師P中提供了time()函數來直接獲取當前時(shí)間的Unix時生服(shí)間戳。

      &nb他窗sp; 1:  <!--文件8-17.p章們hp:獲取Unix時(shí)間戳-->

      &n車師bsp; 2:  <HTML>

      &n算的bsp; 3:  &nbs熱做p;  <HEAD>

   &nb明木sp;    4:&nbs低不p;    &nbs船大p;   <TITLE>獲為快取Unix時(shí)間戳</TIT市答LE>

      玩微  5:   爸現;  </HEAD>

      答化  6:&n員多bsp;    <土草;BODY>

  &nb議跳sp;    玩器 7:     &有一nbsp;  <?php

   &nb見術sp;  &n能鐘bsp; 8:&nb坐微sp;   &n是河bsp;  唱舊;  $tm= time();

   &答門nbsp;  錢司  9:  &舞西nbsp;  &nb科個sp;   echo &quo對討t;當前時(shí)間的Unix時(shí)間戳爲:&q懂快uot;.$tm;

   &理藍nbsp;    長放10:    自分;   ?聽雨>

      朋外  11:&冷制nbsp;   &船師lt;/BODY>

      &務熱nbsp; 12: </森錢HTML>

     &nbs地請p;  本程序運行結果如圖8-15所示。票我

     水農;   

8-17.jpg

圖8-15  程序8-17.php的運行結果

 

    &nb習車sp;  &nb土答sp;  &nb亮我sp; 圖中的數字1206419093表示的是從1970年1月1日0點0分0秒請身到本程序執行時(shí)相隔的秒數。如果每隔一段時(shí)間刷新一下能話頁面(miàn),會(huì)發(fā)現時(姐老shí)間戳的值每次都(dōu)冷廠會(huì)變化。因爲每過(guò)一秒森間鍾,這(zhè)個數字就(jiù)增加1。每次刷新頁面(miàn器小)都(dōu)會(huì)重新調用程序,都(dōu)會(huì)很音獲得一個不同的時(shí)間,因此Unix時(shí)間戳在不斷變現開化。具體的說(shuō),這(zhè)個數字在不斷增大。

 

    一司;   &電快nbsp;    8.3.4.3  獲取做文指定時(shí)間的Unix時(shí)間戳

 

      白分     &n道紅bsp;能(néng)不能(néng)媽年獲得一個指定時(shí)間的Unix時(shí)間戳呢?也內草就(jiù)是說(shuō)要獲得的時(shí)間戳不是當前時(shí)們讀間的,而是一個固定時(shí)間鄉海的。PHP給提供了mktime()函數和strtotime()函數來完成(ch藍還éng)這(zhè)個操作。

    &nb土對sp;     視商;  mktime()函數的格式如下:

    &n兒區bsp;     &n好司bsp; int mktime ( [int hour 但數[, int minute [, int second [, int m日靜onth [, int day [, int year]]讀通]]]] )

   吧坐;     &nb木金sp;  &nbs有和p;本函數的作用是根據給出的參數返回Unix時(shí這作)間戳。6個參數全都(dōu)是整數,可鄉分别代表小時(shí)、分鍾、秒、月、日、年。參數可以從右向(xià影金ng)左省略,任何省略的參數會(huì)被(bèi)設置自購成(chéng)本地日期和時(shí)間的當前值。當全部暗地參數都(dōu)被(bèi)省略時(shí),獲得的就(jiù)是當前時劇紅(shí)間的Unix時(shí)間戳。

     車器    &nbs話微p;  另外strtotime()函數允許使用一個時(的唱shí)間字符串作爲參數來獲取Unix舞和時(shí)間戳。這(zhè)子街個時(shí)間串的順序與中文習慣較爲吻合到也。如“2000-11-12 10:34:5校都5”表示2000年11月12日10時(shí)34分校和55秒。該字符串指代了一個具體的時(shí)間,可以作爲strtotime()司女函數的參數,來獲得這(zhè)答姐個時(shí)間的Unix時(女海shí)間戳。

    報木;   &nb從相sp;    1:  <!--文件8-18.php:獲取指定時(shí)學能間的Unix時(shí)間戳-->

   &nb國秒sp;   &n空廠bsp;    你煙;2:  <HTML>

   &n費畫bsp;     &nbs廠司p;  3:   &n煙個bsp;  <HEAD>

      件技     &nbs了習p;4:   &n吃聽bsp;     票湖;   <TITLE>獲車家取指定時(shí)間的Unix時(shí)間會嗎戳</TITLE>

     上電;     &n機來bsp; 5:   &理車nbsp;  </HEAD>

   &nbs秒跳p;      都街;  6:   &nbs為人p;  <BODY>

      相民;    爸山;  7:     &nb間藍sp;    &nb哥上sp; <?php

     &nbs城在p;      8:    風喝      &nb日去sp;  //用mktime()返回時(shí)間戳

    &件員nbsp; &nbs女水p;   &冷還nbsp; 9:     &nbs西說p;    &nbs冷舞p;  $tm= mktime(23,56,59,12,玩通20,1999);

     &nb但如sp;  &花光nbsp;   10:   快雨;      &nb服員sp;   &nbs亮很p; echo "1999年12月20日23點56分5可現9秒的Unix時(shí)間戳爲:&quo是線t;.$tm;

      &一化nbsp;    &nbs什見p;11:       紅音     &nb鄉妹sp;  //用str志他totime()返回時(shí)間戳

      &n微北bsp;    &nb好東sp;12:       &n知動bsp;   &說著nbsp; &nbs術民p; $tm2= strtoti南錯me("1999-1坐坐2-20 23:56:59");

  &nbs鐵雨p;     時物;  &n你低bsp; 13:      睡月;   &報行nbsp;  &nbs裡低p;  echo &quo飛務t;<br>用strtotime獲得的同一間用時(shí)間的時(shí)間戳:".黃文$tm2;

   她機      &n從船bsp;  14:    &nbs謝購p;     自上; ?>

  &nb美火sp;   外跳   &nbs就錢p;  15:    &nbs妹分p; </BODY>

    &麗北nbsp;    工火;   16: </HTML>

      少雪;   &nb空門sp;  本程序運行結果如圖8-16所示。

8-16.jpg

圖8-16  程序8-18.p算錢hp的運行結果

 

   區醫    &兵農nbsp;   &nbs低輛p;程序8-18.php用mktime函數將(jiā銀理ng)一個指定時(shí)間格式化爲Un科服ix時(shí)間戳。然後(hòu務火)用strtotime函數同樣(yàng)格式化這(zhè)個時子火(shí)間,不過(guò)用一個字符串而不員不是6個數字作爲參數。運行結果顯示兩(liǎng)個函數的返回結果高嗎完全相同。刷新頁面(miàn)時(shí),時(shí)間戳但師值都(dōu)不會(huì)發(f資水ā)生變化。因爲這(zhè)個時(shí)間也短戳是一個固定的時(shí)間,不會飛物(huì)随當前時(shí)間變化而變化。音通

   關些  &nbs體呢p;  &友在nbsp;   有的讀者可能(néng)會(hu女拍ì)問一個問題:如果我使用mkti志你me函數時(shí)提供的參數不符合常規,會件草(huì)出現什麼(me)情況呢?比如每年姐道最多有12個月,不可能(néng)有14月,員舞如果給月份這(zhè)個參數提供一個14,會(huì)怎樣(yàng)呢?實內草際上,PHP會(huì)把某年區年的14月作爲下一年的2月。如1999年14月會(hu到熱ì)被(bèi)認爲是2000年2月。睡購同理如果時(shí)間設置爲23分70秒,那PHP會(huì拿這)作爲24分10秒來處理。讀者可以自行編制程序進(jìn)行高跳測試。

 

      對鐘      8.3.4.4  取得時(shí)間日美麗期信息

 

     物能   風視;  &n志雨bsp; 前面(miàn)學(xué)習了如何獲得一可輛個時(shí)間的Unix時(窗花shí)間戳。雖然用Unix時(shí)間戳有利于在計算機中進(近雪jìn)行時(shí)間的計算,但是在顯示時(shí)間時(shí)還(h可東ái)是應該顯示成(chéng)通用的“年月日時(shí)分車也秒”以及星期幾等格式,而不是直接輸出一個Unix友朋時(shí)間戳。PHP中提供了dat什道e()和getdate()等函數來實現從Unix時(shí)間戳到通用時(行作shí)間日期的轉換。

      &n懂技bsp;     1.getdate()函數

  &nbs樂黃p;    &nbs雜樹p;   &n服有bsp;getdate()函數用來將(jiāng)一個Unix時(shí)間戳格式化得森成(chéng)具體的時(shí)間日期信息,其玩關使用格式如下:

    &nbs場頻p;   &輛的nbsp;   array getdate ( [int timestamp] )

    頻綠   &nb筆店sp;  分子  其中參數timestamp就(訊兵jiù)是一個Unix時(shí)間戳。如果不指定參數,則默認使用當前時分知(shí)間。該函數返回一個數組,數組中存放術雜了詳細的時(shí)間信息。通過(guò)數組下标坐那可以取得數組中的元素值。其下标與值得對(duì)應關系如表8-4所示喝子。

8-4.png

 

     &nb森但sp;    畫報  下面(miàn)我們看一個例子,來全面(miàn)展示該函數的強到關大功能(néng)。

   現窗  &nbs少嗎p;   &空件nbsp;  1:  <!--文件商吃8-19.php:getdate()函數服聽獲取詳細的時(shí)間信息-->

      &姐風nbsp;  &nb近慢sp;  2:  <HTML>

   是司;   雨厭      3:   &國相nbsp;   <HEAD>

    &nb窗用sp;   木日    4:     樂作;       &通答lt;TITLE>getdate()函數獲取詳細的時(sh友房í)間信息</TITLE>

      &nb說男sp;     近見;5:   窗錢;    </HEAD民西>

   &作吃nbsp;     多關;   6:   &n房白bsp;   <BODY>

     &n森也bsp;  如南    7:    &n見算bsp;   &nbs花新p;  <?php

   &nb動這sp;    &n報員bsp;  &n時刀bsp;8:    報村   &nb著短sp;    //首先拿明假設一個時(shí)間

      &n外影bsp;  &n妹唱bsp;  9:   &nbs亮高p;     &體海nbsp;  $dt= "2007-07-0裡村1 08:30:00";

     &nb都道sp;     水拿 10:       請麗;     &土兒nbsp; echo "時(shí)間:&車線quot;.$dt."<br&g大吧t;";

      &n知鐘bsp;    筆服; 11:   北習   &n話一bsp;    吃金;   //將(jiāng)此遠開時(shí)間格式化爲Unix時(shí)間戳

     &nbs數雨p;   &nbs低但p;  12:   &n歌月bsp;    &坐了nbsp;  &n去技bsp;  $tm= strtotime($dt)身好;

    聽房   &n亮做bsp;  &n樹花bsp; 13:      通聽   &n不來bsp;    echo "金舊;此時(shí)間的Unix時(章廠shí)間戳:".$tm.&qu道讀ot;<br>";

   廠站;   &n多務bsp;   &雨身nbsp; 14:     &nbs到放p;     &nbs光山p;  //獲取該時(shí)那男間的詳細信息

     &nb什下sp;     &n黑學bsp;15:      &nb農票sp;  船市     地謝;$arr = getdate($tm);年年

    城謝;     &nbs呢員p;  16:       光她     &門工nbsp; //輸出詳細信息

     &nb土喝sp;     文們 17:     &nbs匠舊p;      呢離  echo "秒:&qu為爸ot;.$arr["seconds"]醫兵."<br&g議雪t;";

    &nbs喝很p;     術北;  18:       村西;    &nb科聽sp;  ech拍坐o "分:".$arr["minutes&qu高店ot;]."<br>路道";

    &nb們理sp;     &湖嗎nbsp; 19:      &nbs玩離p;     &校吧nbsp; echo "時(shí)短睡:".$arr["hours&qu聽動ot;]."<問志br>";

      &nb動議sp;  &nb子舞sp;  20:       &n吧街bsp;     鄉雪; echo "日:".$arr[&q小街uot;mday"]."時腦;<br>";

  &nbs媽車p;    呢有    &n書暗bsp;21:       &喝內nbsp;    老從  echo "月:&quo人美t;.$arr["mon"].&q做火uot;/".$arr["month"嗎舞;]."<br>&qu家路ot;;

     來街     &nbs工的p; 22:      &nb件金sp;     &nbs光從p; echo "年:".$arr[&quo鐵歌t;year"].&河麗quot;<br>&quo通長t;;

      北為;   &nbs歌如p;  23:  &nb請從sp;   師雨;    北火    echo &qu訊自ot;星期:".$arr["wday"].&q光可uot;/".$arr["weekday&qu雜風ot;]."<br>"海務;;

   生制;    &nbs國房p;    24:     美近    &nb票男sp;    短到echo "該日期是該年中的第".$笑裡arr["yday&志都quot;]."天&微一lt;br>";下物

   &綠睡nbsp;    &n爸離bsp;   路爸25:      &術商nbsp;  &n行些bsp;?>

    &nb南外sp;  &n但些bsp;   土信; 26:    &玩事nbsp; </BODY>

    &計來nbsp;    書吧   27: </HTML>

    &n答信bsp;   大湖    本程序中,第9行設置了一個時(shí)懂弟間,第12行將(jiāng)此時(shí)間格式化成(chén拿還g)UNIX時(shí)間戳。第15行將(jiāng)此時(s風又hí)間戳用getdate()函數獲取詳細時(吧玩shí)間信息。然後(hòu)在內個第17~24行分别輸出了全部的紙校時(shí)間信息。程序的輸出結果如圖8什街-17所示。

     兒相   &姐中nbsp;   

8-17.jpg

圖8-17  程序8-19.php的運行結果

 

   &nbs輛區p;      &視見nbsp; 本程序中假定日期爲“2007-07-01 08:30:00”,實際上可以子購直接用語句“$arr = getdate();”來獲得當前時(shí)間拿舞的詳細信息。這(zhè)時(shí)輸出的時(湖土shí)間信息就(jiù)是當前程序執行時(sh間低í)的時(shí)間信息。感興趣的讀員機者可以自行測試。

   &山我nbsp;  拍她;  &nbs看票p;   花黃;2.date()函數

    &n錢師bsp;   &nb樹小sp;   date()函數用來將(jiāng)一個Unix時(shí)間戳格式跳生化成(chéng)指定的時(shí)間/日期格式。g南村etdate()函數可以獲取詳細的時(sh市南í)間信息,但是很多時(shí)候并不是要取得如此具體的時(shí)間們藍信息,而是將(jiāng)一個Unix時西來(shí)間戳所代表的時(shí)劇訊間按照某種(zhǒng)容易識讀的格式輸出。這(zhè)答厭就(jiù)需要用到date()函數。該函數的使用樹門格式是:

  &nb姐但sp;   明火     &nb男和sp;string date ( str的裡ing format [, int timestamp] )

    多為      &n視小bsp; 該函數直接返回一個字符串。這(zhè)個字符串就(ji森的ù)是一個指定格式的日期時(shí)間。參數f和土ormat是一個字符串,用來指定輸出的時(shí)間的格式。可選參數鐵拍timestamp是要處理的時(shí)間的U草都nix時(shí)間戳。如果參數爲空,那麼(me)默認值爲當前時(sh內微í)間的Unix時(shí)間戳。

   報影     &nb有內sp;   本函數的重點是學(xué)習如何使用format參數。西著format參數必須由指定的字符構成(雪雜chéng),不同的字符代表不同的特殊含義,如表8-5所示。

    &nb白睡sp;    &門文nbsp; &nbs錯關p;

8-5.1.png

 

8-5.2.png

 

   &nbs雜也p;  &國南nbsp;  &農業nbsp;  表8-5中列出了絕大部分format參數頻做字符,個别極爲不常用的沒(mé老少i)有列出。通過(guò)表8-5計在已經(jīng)看出format字符數量衆多,涉及方方面(m相亮iàn)面(miàn)。date()函數可以完成(chéng)的功能(n北門éng)極爲豐富。

      &n作視bsp;  &nbs線會p;  下面(miàn)我們通過(guò)一個例子來看這(zhè)些format字些紅符如何使用。

   &體化nbsp;  開海;    &n喝地bsp; 1:  <!--文件8-20.php:件靜用格式化字符串輸出時(shí)間信息-->

   書事;  &n很西bsp;  &nb明木sp;   2:  <HTML有吃>

    &nbs姐又p;     &nb電鐘sp; 3:   &nbs時裡p; <HEAD>

      是物;     畫拍; 4:     上議    請刀; <TITLE>用格式化字符串輸出時(拿謝shí)間信息</TITLE>

     &nbs新船p;    &放喝nbsp; 5:   拍間  </HEAD>

     錯火      &nb個區sp;6:     <BODY&g城電t;

  &nbs關山p;    &n就些bsp;  &nbs小生p; 7:      &nb鄉來sp;  &nbs靜照p;<?php

     鐘人   &nb公路sp;  &n內頻bsp;8:     &nbs呢嗎p;    &nbs我房p;//設置一個時(shí)間(如采用當前時(shí)間可用time())

   雪銀;   &n用自bsp;  我她;   9:      &畫員nbsp;    $tm =業市 strtotime("2008-09-09 10:30:40&q通答uot;);

    &nbs她下p;   &n站笑bsp;   10:      紅多     &nb來上sp; echo "初始化設置的時(sh雜呢í)間爲:2008-09-09 10:30:40<br>&quo湖南t;;

    &坐內nbsp;  &書關nbsp;   離木 11:      &樹樹nbsp;   &年服nbsp;  //使用不同的格式化字符串測試輸出效果

      小村;   區妹   12:      &n煙說bsp;    化件;  echo date(&q鄉哥uot;Y-M-D H:I:S A",$tm)."&l知美t;br>";

   場他;      務雜;   13:   &nbs區玩p;   業聽    &nbs友們p; echo date("y-m-d放吧 h:i:s a",$tm)."愛農<br>";

    &n東電bsp;     &黃如nbsp; 14:     &nb司船sp;      動的 echo date("Y年m月d日[l] H點i分s站不秒",$tm)."<從文br>";

      &她視nbsp;   &n醫算bsp; 15:   &nbs站長p;   &兒舊nbsp;     東吧;echo date("F,d,Y l我大",$tm)."<br>";的房

     &n鄉算bsp;    &nbs西開p; 16:       &近輛nbsp;    &nbs線跳p;echo date("明器Y-M-D H:I:S",$tm)."<上化;br>";

    問地   現用  &nb遠樂sp;  17:   器師;   &n來業bsp;  &拍雜nbsp;  河現; echo date("Y-那月M-D H:I:S",$tm).&quo內湖t;<br>";

      &n嗎們bsp;  &亮女nbsp;  18:     學你   老如;   &n路嗎bsp; echo date(&q讀習uot;所在時(shí)區:T,與格林威治時(shí)間師司相差:O小時(shí)",$tm他近)."<br>";

   多上  &nbs哥舊p;   &n空街bsp;  19:     水風;     &nbs要飛p; //輸出詳細信息

      &nb兵內sp;   &n唱弟bsp; 20:     &冷問nbsp;   ?用看>

   &n年白bsp;   看城   家腦;  21:      可暗</BODY>

      &nb制空sp;   &nb林師sp; 22: </HTML>

   &我鄉nbsp;     &nb錢聽sp;  本程序的運行結果如圖8-18所示。

   那制   &nb鐵電sp;     

8-18.jpg

圖8-18  程序8-20.php妹低的運行結果

 

    &nb校嗎sp;   &n的村bsp;   通過(guò)程序8-20.php可以看出,格式化字符串近歌的使用非常靈活。隻要在字符串中包含相關字符,date函數就問自(jiù)能(néng)把這(zhè)些字符替換成(chéng)指定的時跳河(shí)間日期信息。可以利用這(件明zhè)個函數随意輸出需要的時(shí)間日期格式。

    &n雨業bsp;   離湖    程序的最後(hòu)一條輸出用的是下跳格式字符“T”和“O”來輸出運行本程序的服務器所處的時(shí)區以及本家妹時(shí)區和格林威治标準時(shí)間相差的小時(shí)數。程序輸出時懂報(shí)區爲UTC,相差時(shí)間爲0小時(shí)。這(的雜zhè)雖然與世界标準時(shí)區和時(shí)間相南件符,但是并不是本地的時(shí)間。如北京時(shí)間要比格林威視船治時(shí)間晚8個小時(shí),因此在取得的本地時(shí)間文熱基礎上再增加8個小時(shí)才是北京時(shí)間。增加月物8個小時(shí)的方法很簡單,在已經(jīng)取得的當前時(shí)師作間的Unix時(shí)間戳上加8*60*60即是8小時(shí)之後(上著hòu)的時(shí)間戳。如果讀者在編還煙寫程序時(shí)發(fā)現程序獲得技睡的時(shí)間與北京時(shí)間不符,應該從地考慮是否是時(shí)區問題,對(duì)取得的時(shí)間進(這自jìn)行相應處理即可。

  &nb鄉冷sp;      書風   PHP的時(shí)間日期函數很常用,但并不複雜。讀者一般隻需要掌握生高Unix時(shí)間戳的獲得和操作方法和格式化字符樹嗎的使用方法,即可輕松掌握PHP時(s這做hí)間日期的處理。

 


  • 魏世浩 2018-01-09 15:57:31
    老師做這(zhè)些很辛苦,而我們從老師的辛苦中學(銀從xué)到了不少
  • 馬文琦 2018-01-09 16:19:34
    老師講解詳細,需要好(hǎo)好(hǎo)學(x錢紙ué)習
  • 劉鑫蕊 2018-01-09 16:33:41
    老師講的很詳細,從中學(xué)到很多。