PHP中的日期及時間

來源:互聯網
上載者:User

PHP有很多便於使用的函數以顯示及處理日期。
要以某種特定格式顯示日期或時間,可使用date()函數。它有兩個參數:如何顯示日期的格式以及代表你所要顯示日期的時間戳記。這個時間戳記必須是先前所提到的從 1970 年起算的總秒數(如果你要使用目前時間可使用time()函數,此函數會返回“現在”的時間戳記)。date() 有很多格式選項,如同C語言中的strftime()函數或Perl語言的POSIX::strftime()函數一樣。
<?php
$birthday_stamp = mktime(19,45,0,3,10,1975);
$birthday_formatted = date('F d, Y - g:ia',$birthday_stamp);
echo "David was born on $birthday_formatted."
?>
會顯示
David was born on March 10, 1975--7:45 p.m.
當然,如果你需要某已知的特定日期,這種複雜的格式函數並不會十分有用。因為你事先已經知道你的格式將會是什麼。當在處理需要使用者選擇某日期的表單輸出部分時,這些函數會比較有用:
<SELECT NAME="when">
<?php
$d = time();
for ($i = 0; $i < 10; $i++) {
echo '<OPTION VALUE="'.$d.'">'.date('F d',$d);
$d += 86400;
}
?>
</SELECT>
以上會輸出一個單選框,其中有十個選項——今天及以後九天。在程式迴圈開始之前,我們將目前時間存放於變數$d中。每一個<OPTION>值會被顯示,而其中的值會是以Unix時間戳記計算,且所顯示出來的文字設定為月、日(“July 27”、“July 28”等等)。在顯示值後,變數$d 會被加上 86,400(是一天二十四小時的總秒數——24小時*60分鐘*60秒)。
通過結合mktime()及date()函數,你就可以得出關於某特定使用者輸入日期的相關資訊。那如果要尋找從某特定日期算起的第一個星期天(或者一周中的任意一天)呢?首先,先編寫一個會輸出適當格式的函數:
<?php
functiondisplay_form() {
global $PHP_SELF;
$dotw = array('Sunday','Monday','Tuesday','Wednesday','Thursday',
'Friday','Saturday');
$months = array( 1 => 'January','February','March','April','May','June',
'July','August','September','October','November','December');
?>
<FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>
Find the first
<SELECT NAME="dotw">
<?php
for ($i = 0; $i < 7; $i++) {
echo "<OPTION> $dotw[$i]";
}
echo '</SELECT> after <SELECT NAME="month">';
for ($i = 1; $i <= 12; $i++) {
echo "<OPTION VALUE=\"$i\"> $months[$i]";
}
echo '</SELECT> <SELECT NAME="day">';
for ($i = 1; $i <= 31; $i++) {
echo "<OPTION> $i";
}
echo '</SELECT>, <SELECT NAME="year">';
$start_year = date('Y') - 10;
$end_year = $start_year + 20;
for ($i = $start_year; $i <= $end_year; $i++) {
echo "<OPTION> $i";
}
echo '<INPUT TYPE="HIDDEN" NAME="stage" VALUE="process">';
echo '</SELECT> <INPUT TYPE="SUBMIT" VALUE="Do it!"7></FORM>';
}
?>
這當中含有一些函數是我們到目前為止還沒討論過的。$months數組寫得略微不同,因為需要讓一月份索引為1,而非0。另外,由程式自動產生此表單要比將所有這個表單元素的值一一手動列出要更為輕鬆,因此,頂端的表單開始部分是display_form()函數中唯一不是屬於 PHP模式的。此外,使用資料(“Y”)設定變數$start_year以及變數$end_year能夠方便處理從今年算起十年前後的時間範圍。
以下是處理表單的函數:
<?php
function process_form() {
global $dotw;
global $month;
global $day;
global $year;
$timestamp = mktime(0,0,0,$month,$day,$year);
$next_dotw = '';
$next_timestamp = $timestamp;
while ($next_dotw != $dotw) {
$next_timestamp += 86400;
$next_dotw = date('l',$next_timestamp);
}
$formatted_first = date('F d, Y',$timestamp);
$formatted_next = date('F d, Y',$next_timestamp);
echo "The first $dotw after $formatted_first is $formatted_next.";
}
?>
首先,此代碼將所得到的日期轉化為Unix時間戳記形式。如果我們需要更為謹慎的話,可以加入某些代碼以確保所得到的日期在合法的日期範圍內,不過在這此我們暫時沒有必要這樣做。
當我們要尋找的“下一天”的星期數不是使用者所輸入的一個星期數時,迴圈繼續。當不一樣時,日期所代表的總秒數就會被增加(同樣是86400秒=24小時*60分鐘*60秒),然後那個秒數所代表的星期數就會被重新計算。
一旦星期數一致,process_form() 函數就會輸出一行正確訊息:
The first Sunday after June 25, 1999 is June 27, 1999.
我們同樣需要那個熟悉的主迴圈將這些函數捆綁在一起:
<?php
if (empty($stage)) { display_form(); }
else { process_form(); }
?>
日期處理代碼有時需要更為複雜以處理夏令時及不同時區,不過date()以及mktime()函數都是處理Unix時間戳記變換的基本工具,它們在演算法上操作簡單,且以直觀方式表達日期與時間。函數date()以及mktime()以機器所在時區來對時間進行操作。如果想使用格林威治時間(GMT),則可使用函數gmdate()以及gmmktime()。
例如,對於一台處於美國東部夏令時的電腦(落後格林威治時間四小時):
<?php
$today = mktime(12,0,0,6,25,1999);
echo 'Here it is '.date('g:i:s a, F d, Y',$today);
echo '';
echo 'In GMT it is '.gmdate('g:i:s a, F d, Y',$today);
?>
將顯示
Here it is 12:00:00 pm, June 25, 1999
In GMT it is 4:00:00 pm, June 25, 1999
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.