PHP系列學(xué)習(xí)之日期函數(shù)
介紹
PHP是一門非常令人驚奇的語言。它足夠強(qiáng)大(***的博客(wordpress)的核心語言),它足夠廣泛(運(yùn)行在***社交網(wǎng)站facebook上),它足夠簡(jiǎn)單(作為初學(xué)者***入門語言)。在低成本的機(jī)器上運(yùn)行良好。而且php語言有很多非常不錯(cuò)的服務(wù)器套件(如WAMP和MAMP),很方便的安裝在你的機(jī)器上。PHP有非常豐富的庫資源,便于開發(fā)者很容易的處理一些業(yè)務(wù)。由于我們?cè)陧?xiàng)目中與日期接觸最多,所以今天就從日期函數(shù)入手學(xué)習(xí)。
舉一個(gè)簡(jiǎn)單的date例子
我將使用echo命令把內(nèi)容輸出到我們的客戶端(瀏覽器)。我將使用下面的代碼做為基礎(chǔ)代碼。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <title>Getting started with dates in php5</title>
- </head>
- <body>
- <?php
- date_default_timezone_set('Asia/Shanghai');
- echo "Today is ",date('l');
- ?>
- </body>
- </html>
你將在你的瀏覽器里看到如下的內(nèi)容。
Today is Friday
這個(gè)函數(shù)輸出星期幾的文本格式。date函數(shù)至少需要一個(gè)字符參數(shù)(這個(gè)參數(shù)告訴我們?cè)鯓痈袷交?dāng)前日期)。
嘗試不同的格式
如果你看了php手冊(cè)中PHP date function,那么你將發(fā)現(xiàn)有很多格式化日期的方式。
- <?php echo "Today is ",date('Y-m-d'); ?>
將得到:Today is 2012-08-17
有一些日期是很普遍地被使用,所以PHP提供了一些常量供你使用。舉例,你可以使用Cookie獲取到客戶端日期。
- <?php echo "Today is ",date(DATE_COOKIE); ?>
你將得到如下面的內(nèi)容:Today is Friday, 17-Aug-12 11:34:38 CST
注意當(dāng)使用常量的時(shí)候不要使用引號(hào)。
現(xiàn)在是什么時(shí)候?
如果你想要輸出當(dāng)前時(shí)間,你能使用date(不同格式化字符參數(shù))。
- <?php echo "The time is ",date('g:i:sa'); ?>
你將得到:The time is 11:39:59am
本地化你的時(shí)區(qū)
如果你發(fā)現(xiàn)以上的代碼沒有給出正確的時(shí)間,很有可能是因?yàn)槟愕姆?wù)器設(shè)置了與你本地不同的時(shí)區(qū)。你需要在服務(wù)器上指定時(shí)區(qū),那么你用下面的代碼:
- <?php date_default_timezone_set('Asia/Shanghai'); ?>
這個(gè)將設(shè)置中國上海時(shí)區(qū)。這是php5的函數(shù)(注意舊版本的php),有很多供你選擇時(shí)區(qū)。如果你想***生效,你可以修改你的php.ini文件。
獲取其他時(shí)間
你經(jīng)常需要其他時(shí)間,而不是現(xiàn)在的時(shí)間。當(dāng)你用date()函數(shù)創(chuàng)建時(shí)間的時(shí)候,系統(tǒng)會(huì)使用Unix系統(tǒng)時(shí)間。這個(gè)時(shí)間表示從1970年1月1日 00:00:00 GMT(Unix 紀(jì)元時(shí)間),到現(xiàn)在的秒數(shù)。
為了詳細(xì)說明怎樣獲取指定時(shí)間的日期,你可以提供秒數(shù)做為date(0函數(shù)的第二個(gè)參數(shù)。
- <?php echo "Today is ",date('Y-m-d', 1309133434); ?>
結(jié)果是:Today is 2011-06-27
這個(gè)看起來沒什么用途,但它意味著你能用date()函數(shù)做計(jì)算。這之前,你需要簡(jiǎn)單的創(chuàng)建一個(gè)時(shí)間戳。
創(chuàng)建時(shí)間戳
有很多創(chuàng)建時(shí)間戳的方式。我們能夠使用mktime()函數(shù)得到我們需要的時(shí)間戳。
- <?php
- $mytime=mktime(9, 23, 33, 6, 26, 2011);
- echo "Today is ",date('Y-m-d g:i:sa', $mytime);
- ?>
得到的結(jié)果是:Today is 2011-06-26 9:23:33am
mktime()函數(shù)需要你依次傳遞小時(shí),分鐘,秒,月,日,年。這是獲取時(shí)間戳的好的方式,但是有更酷的方式。
通過字符獲取時(shí)間戳
你可以使用strtotime()函數(shù)獲取時(shí)間戳,php把可讀的字符轉(zhuǎn)換成Unix時(shí)間戳。PHP在把字符轉(zhuǎn)換成時(shí)間戳方面是相當(dāng)靈活的,因此你可以插入各種各樣的值來獲取你想要的時(shí)間戳。
這是一個(gè)簡(jiǎn)單例子:
- <?php
- $mytime=strtotime("7:50pm June 26 2011");
- echo "Today is ",date('Y-m-d g:i:sa', $mytime);
- ?>
輸出:Today is 2011-06-26 7:50:00pm
PHP在解釋字符方面是相當(dāng)靈巧的,但不是***的,因此,在你插入之前一定要測(cè)試你輸入的字符。使用"english-like instructions"轉(zhuǎn)化成需要的時(shí)間戳,這是一個(gè)非常不錯(cuò)的方式。你可以像下面這樣做:
- $nextfriday=strtotime("next Friday"); //下周五
- $nextmonth=strtotime("+1 Month"); //從今天開始計(jì)算一個(gè)月以后的時(shí)間
- $lastchristmas=strtotime("-1 year dec 25"); //去年圣誕節(jié)
獲取日期范圍
strtotime返回的值被轉(zhuǎn)換為數(shù)字,我們能夠用這些數(shù)字做基礎(chǔ)運(yùn)算,我們可以用這些數(shù)字做很多非常有意思的事情。比如,你每周二需要教一門功課,為期16周,你想得到你教科時(shí)間。你能夠做下面的事情。
- <?php
- $startdate = strtotime('next Tuesday');
- $enddate = strtotime('+16 weeks', $startdate);
- $currentdate = $startdate;
- echo '<ol>';
- while($currentdate < $enddate):
- echo "\t<li>", date('M d', $currentdate);
- $currentdate = strtotime('+1 week', $currentdate);
- endwhile;
- echo '</ol>';
- ?>
你將會(huì)得到如下的結(jié)果:
- Aug 21
- Aug 28
- Sep 04
- Sep 11
- Sep 18
- Sep 25
- Oct 02
- Oct 09
- Oct 16
- Oct 23
- Oct 30
- Nov 06
- Nov 13
- Nov 20
- Nov 27
- Dec 04
注意一下這行:$currentdate = strtotime("+1 week", $currentdate)。在這行,你會(huì)發(fā)現(xiàn)你需要指定一個(gè)時(shí)間戳做為第二個(gè)參數(shù),strtotime將使用這個(gè)參數(shù)代替默認(rèn)時(shí)間戳(今天),并進(jìn)行運(yùn)算。
到某一個(gè)日期的天數(shù)
使用計(jì)算器的時(shí)候,我們會(huì)試圖去計(jì)算到某一天的天數(shù)。你很容易計(jì)算11月份第四個(gè)星期四的時(shí)間戳。
- $someday = strtotime("3 weeks thursday November 1");
- $daysUtilDate = ceil(($someday - time())/60/60/24);
- echo "There are ", $daysUtilDate, " until Thanksgiving";
首先,我們開始計(jì)算感恩節(jié)日期(11月1號(hào)之后的***個(gè)星期四之后的第3個(gè)星期四),然后我們通過簡(jiǎn)單的算術(shù),計(jì)算出感恩節(jié)到當(dāng)前時(shí)間之間的天數(shù)。當(dāng)我們進(jìn)行比較運(yùn)算的時(shí)候,我們可以使用time(),因?yàn)樗祷?,到?dāng)前時(shí)間的紀(jì)元秒數(shù)。
情有獨(dú)鐘
如果你開始著手學(xué)習(xí)php,學(xué)習(xí)日期是學(xué)習(xí)這種語言***的方式,因?yàn)槿掌谟泻芏喾浅S幸馑嫉臇|西隨你處理。在手冊(cè)中發(fā)掘日期和時(shí)間相關(guān)的函數(shù),請(qǐng)分享你的收獲給大家。
原文鏈接:http://www.cnblogs.com/baochuan/archive/2012/08/17/2643716.html
【編輯推薦】