PHP系列學習之日期函數
介紹
PHP是一門非常令人驚奇的語言。它足夠強大(***的博客(wordpress)的核心語言),它足夠廣泛(運行在***社交網站facebook上),它足夠簡單(作為初學者***入門語言)。在低成本的機器上運行良好。而且php語言有很多非常不錯的服務器套件(如WAMP和MAMP),很方便的安裝在你的機器上。PHP有非常豐富的庫資源,便于開發者很容易的處理一些業務。由于我們在項目中與日期接觸最多,所以今天就從日期函數入手學習。
舉一個簡單的date例子
我將使用echo命令把內容輸出到我們的客戶端(瀏覽器)。我將使用下面的代碼做為基礎代碼。
- <!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>
你將在你的瀏覽器里看到如下的內容。
Today is Friday
這個函數輸出星期幾的文本格式。date函數至少需要一個字符參數(這個參數告訴我們怎樣格式化當前日期)。
嘗試不同的格式
如果你看了php手冊中PHP date function,那么你將發現有很多格式化日期的方式。
- <?php echo "Today is ",date('Y-m-d'); ?>
將得到:Today is 2012-08-17
有一些日期是很普遍地被使用,所以PHP提供了一些常量供你使用。舉例,你可以使用Cookie獲取到客戶端日期。
- <?php echo "Today is ",date(DATE_COOKIE); ?>
你將得到如下面的內容:Today is Friday, 17-Aug-12 11:34:38 CST
注意當使用常量的時候不要使用引號。
現在是什么時候?
如果你想要輸出當前時間,你能使用date(不同格式化字符參數)。
- <?php echo "The time is ",date('g:i:sa'); ?>
你將得到:The time is 11:39:59am
本地化你的時區
如果你發現以上的代碼沒有給出正確的時間,很有可能是因為你的服務器設置了與你本地不同的時區。你需要在服務器上指定時區,那么你用下面的代碼:
- <?php date_default_timezone_set('Asia/Shanghai'); ?>
這個將設置中國上海時區。這是php5的函數(注意舊版本的php),有很多供你選擇時區。如果你想***生效,你可以修改你的php.ini文件。
獲取其他時間
你經常需要其他時間,而不是現在的時間。當你用date()函數創建時間的時候,系統會使用Unix系統時間。這個時間表示從1970年1月1日 00:00:00 GMT(Unix 紀元時間),到現在的秒數。
為了詳細說明怎樣獲取指定時間的日期,你可以提供秒數做為date(0函數的第二個參數。
- <?php echo "Today is ",date('Y-m-d', 1309133434); ?>
結果是:Today is 2011-06-27
這個看起來沒什么用途,但它意味著你能用date()函數做計算。這之前,你需要簡單的創建一個時間戳。
創建時間戳
有很多創建時間戳的方式。我們能夠使用mktime()函數得到我們需要的時間戳。
- <?php
- $mytime=mktime(9, 23, 33, 6, 26, 2011);
- echo "Today is ",date('Y-m-d g:i:sa', $mytime);
- ?>
得到的結果是:Today is 2011-06-26 9:23:33am
mktime()函數需要你依次傳遞小時,分鐘,秒,月,日,年。這是獲取時間戳的好的方式,但是有更酷的方式。
通過字符獲取時間戳
你可以使用strtotime()函數獲取時間戳,php把可讀的字符轉換成Unix時間戳。PHP在把字符轉換成時間戳方面是相當靈活的,因此你可以插入各種各樣的值來獲取你想要的時間戳。
這是一個簡單例子:
- <?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在解釋字符方面是相當靈巧的,但不是***的,因此,在你插入之前一定要測試你輸入的字符。使用"english-like instructions"轉化成需要的時間戳,這是一個非常不錯的方式。你可以像下面這樣做:
- $nextfriday=strtotime("next Friday"); //下周五
- $nextmonth=strtotime("+1 Month"); //從今天開始計算一個月以后的時間
- $lastchristmas=strtotime("-1 year dec 25"); //去年圣誕節
獲取日期范圍
strtotime返回的值被轉換為數字,我們能夠用這些數字做基礎運算,我們可以用這些數字做很多非常有意思的事情。比如,你每周二需要教一門功課,為期16周,你想得到你教科時間。你能夠做下面的事情。
- <?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>';
- ?>
你將會得到如下的結果:
- 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)。在這行,你會發現你需要指定一個時間戳做為第二個參數,strtotime將使用這個參數代替默認時間戳(今天),并進行運算。
到某一個日期的天數
使用計算器的時候,我們會試圖去計算到某一天的天數。你很容易計算11月份第四個星期四的時間戳。
- $someday = strtotime("3 weeks thursday November 1");
- $daysUtilDate = ceil(($someday - time())/60/60/24);
- echo "There are ", $daysUtilDate, " until Thanksgiving";
首先,我們開始計算感恩節日期(11月1號之后的***個星期四之后的第3個星期四),然后我們通過簡單的算術,計算出感恩節到當前時間之間的天數。當我們進行比較運算的時候,我們可以使用time(),因為它返回,到當前時間的紀元秒數。
情有獨鐘
如果你開始著手學習php,學習日期是學習這種語言***的方式,因為日期有很多非常有意思的東西隨你處理。在手冊中發掘日期和時間相關的函數,請分享你的收獲給大家。
原文鏈接:http://www.cnblogs.com/baochuan/archive/2012/08/17/2643716.html
【編輯推薦】