關聯課件: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所示:
長問 通過(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-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 程序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所示喝子。
&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 程序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;
&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 程序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í)間日期的處理。
老師做這(zhè)些很辛苦,而我們從老師的辛苦中學(銀從xué)到了不少
老師講解詳細,需要好(hǎo)好(hǎo)學(x錢紙ué)習
老師講的很詳細,從中學(xué)到很多。