date

(PHP 3, PHP 4, PHP 5)

date -- 格式化一個本地時間/日期

說明

string date ( string format [, int timestamp] )

返回將整數 timestamp 按照給定的格式字串而產生的字串。若果沒有給出時間戳則使用本地現用的時間。換句話說,timestamp 是可選的,預設值為 time()

提示: 自 PHP 5.1.0 起有幾個有用的常量可用作標準的日期/時間格式來指定 format 參數。

注: 有效的時間戳典型範圍是格林威治時間 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此範圍符合 32 位有符號整數的最小值和最大值)。不過在 PHP 5.1 之前此範圍在某些系統(如 Windows)中限制為從 1970 年 1 月 1 日到 2038 年 1 月 19 日。

注: 要將字串表達的時間轉換成時間戳,應該使用 strtotime()。此外一些資料庫有一些函數將其時間格式轉換成時間戳(例如 MySQL 的 UNIX_TIMESTAMP 函數)。

表格 1. 格式字串可以識別以下 format 參數的字串

format 字元說明返回值例子
------
d月份中的第幾天,有前導零的 2 位數字0131
D星期中的第幾天,文字表示,3 個字母MonSun
j月份中的第幾天,沒有前導零131
l(「L」的小寫字母)星期幾,完整的文字格式SundaySaturday
NISO-8601 格式數字表示的星期中的第幾天(PHP 5.1.0 新加)1(表示星期一)到 7(表示星期天)
S每月天數後面的英文副檔名,2 個字元stndrd 或是 th。可以和 j 一起用
w星期中的第幾天,數字表示0(表示星期天)到 6(表示星期六)
z年份中的第幾天0366
星期------
WISO-8601 格式年份中的第幾周,每週從星期一開始(PHP 4.1.0 新加的)例如:42(當年的第 42 周)
------
F月份,完整的文字格式,例如 January 或是 MarchJanuaryDecember
m數字表示的月份,有前導零0112
M三個字母縮寫表示的月份JanDec
n數字表示的月份,沒有前導零112
t給定月份所應有的天數2831
------
L是否為閏年若果是閏年為 1,否則為 0
oISO-8601 格式年份數字。這和 Y 的值相同,只除了若果 ISO 的星期數(W)屬於前一年或下一年,則用那一年。(PHP 5.1.0 新加)Examples: 1999 or 2003
Y4 位數字完整表示的年份例如:19992003
y2 位數字表示的年份例如:9903
時間------
a小寫的上午和下午值ampm
A大寫的上午和下午值AMPM
BSwatch Internet 標準時000999
g小時,12 小時格式,沒有前導零112
G小時,24 小時格式,沒有前導零023
h小時,12 小時格式,有前導零0112
H小時,24 小時格式,有前導零0023
i有前導零的分鐘數0059>
s秒數,有前導零0059>
時區------
e時區標識(PHP 5.1.0 新加)例如:UTCGMTAtlantic/Azores
I是否為夏令時若果是夏令時為 1,否則為 0
O與格林威治時間相差的小時數例如:+0200
T本機所在的時區例如:ESTMDT(【譯者注】在 Windows 下為完整文字格式,例如「Eastern Standard Time」,中文版會顯示「中國標準時間」)。
Z時差偏移量的秒數。UTC 西邊的時區偏移量總是負的,UTC 東邊的時區偏移量總是正的。-4320043200
完整的日期/時間------
cISO 8601 格式的日期(PHP 5 新加)2004-02-12T15:19:21+00:00
rRFC 822 格式的日期例如:Thu, 21 Dec 2000 16:01:07 +0200
U從 Unix 紀元(January 1 1970 00:00:00 GMT)開始至今的秒數參見 time()

格式字串中不能被識別的字元將原樣顯示。Z 格式在使用 gmdate() 時總是返回 0

例子 1. date() 例子

<?php
// 設定要用的預設時區。自 PHP 5.1 可用
date_default_timezone_set('UTC');


// 輸出類似:Monday
echo date("l");

// 輸出類似:Monday 15th of August 2005 03:12:46 PM
echo date('l dS \of F Y h:i:s A');

// 輸出:July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " date("l"mktime(000712000));

/* 在格式參數中使用常量 */
// 輸出類似:Mon, 15 Aug 2005 15:12:46 UTC
echo date(DATE_RFC822);

// 輸出類似:2000-07-01T00:00:00+0000
echo date(DATE_ATOMmktime(000712000));
?>

在格式字串中的字元前加上反斜線來轉義可以避免它被按照上表解釋。若果加上反斜線後的字元本身就是一個特殊序列,那還要轉義反斜線。

例子 2. 在 date() 中轉義字元

<?php
// prints something like: Wednesday the 15th
echo date("l \\t\h\e jS");
?>

可以把 date()mktime() 結合使用來得到未來或過去的日期。

例子 3. date()mktime() 例子

<?php
$tomorrow  
mktime(000date("m")  , date("d")+1date("Y"));
$lastmonth mktime(000date("m")-1date("d"),   date("Y"));
$nextyear  mktime(000date("m"),   date("d"),   date("Y")+1);
?>

注: 由於夏令時的緣故,這種方法比簡單地在時間戳上加減一天或是一個月的秒數更可靠。

一些使用 date() 格式化日期的例子。注意要轉義所有其它的字元,因為目前有特殊含義的字元會產生不需要的結果,而其餘字元在 PHP 將來的版本中可能會被用上。當轉義時,注意用單引號以避免類似 \n 的字元變成了換行符。

例子 4. date() 格式舉例

<?php
// 假定今天是:March 10th, 2001, 5:16:18 pm
$today date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today date("m.d.y");                         // 03.10.01
$today date("j, n, Y");                       // 10, 3, 2001
$today date("Ymd");                           // 20010310
$today date('h-i-s, j-m-y, it is w Day z ');  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today date('\i\t \i\s \t\h\e jS \d\a\y.');   // It is the 10th day.
$today date("D M j G:i:s T Y");               // Sat Mar 10 15:16:08 MST 2001
$today date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:17 m is month
$today date("H:i:s");                         // 17:16:17
?>

要格式化其它語種的日期,應該用 setlocale()strftime() 函數來代替 date()

參見 getlastmod()gmdate()mktime()strftime()time()