(PHP 4, PHP 5, PHP 7, PHP 8)
date — 格式化一個(gè)本地時(shí)間/日期
$format
, int $timestamp
= ?): string
返回將整數(shù) timestamp
按照給定的格式字串而產(chǎn)生的字符串。如果沒有給出時(shí)間戳則使用本地當(dāng)前時(shí)間。換句話說,timestamp
是可選的,默認(rèn)值為 time()。
自 PHP 5.1.1 起有幾個(gè)有用的常量可用作標(biāo)準(zhǔn)的日期/時(shí)間格式來指定
format
參數(shù)。
自 PHP 5.1 起在 $_SERVER['REQUEST_TIME'] 中保存了發(fā)起該請(qǐng)求時(shí)刻的時(shí)間戳。
注意:
有效的時(shí)間戳典型范圍是格林威治時(shí)間 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范圍符合 32 位有符號(hào)整數(shù)的最小值和最大值)。不過在 PHP 5.1 之前此范圍在某些系統(tǒng)(如 Windows)中限制為從 1970 年 1 月 1 日到 2038 年 1 月 19 日。
注意:
要將字符串表達(dá)的時(shí)間轉(zhuǎn)換成時(shí)間戳,應(yīng)該使用 strtotime()。此外一些數(shù)據(jù)庫有一些函數(shù)將其時(shí)間格式轉(zhuǎn)換成時(shí)間戳(例如 MySQL 的 ? UNIX_TIMESTAMP 函數(shù))。
format 字符 |
說明 | 返回值例子 |
---|---|---|
日 | --- | --- |
d |
月份中的第幾天,有前導(dǎo)零的 2 位數(shù)字 | 01 到 31 |
D |
星期中的第幾天,文本表示,3 個(gè)字母 | Mon 到 Sun |
j |
月份中的第幾天,沒有前導(dǎo)零 | 1 到 31 |
l (“L”的小寫字母) |
星期幾,完整的文本格式 | Sunday 到 Saturday |
N |
ISO-8601 格式數(shù)字表示的星期中的第幾天(PHP 5.1.0 新加) | 1 (表示星期一)到 7 (表示星期天) |
S |
每月天數(shù)后面的英文后綴,2 個(gè)字符 | st ,nd ,rd
或者 th ??梢院?j 一起用 |
w |
星期中的第幾天,數(shù)字表示 | 0 (表示星期天)到 6 (表示星期六) |
z |
年份中的第幾天 | 0 到 365 |
星期 | --- | --- |
W |
ISO-8601 格式年份中的第幾周,每周從星期一開始(PHP 4.1.0 新加的) | 例如:42 (當(dāng)年的第 42 周) |
月 | --- | --- |
F |
月份,完整的文本格式,例如 January 或者 March | January 到 December |
m |
數(shù)字表示的月份,有前導(dǎo)零 | 01 到 12 |
M |
三個(gè)字母縮寫表示的月份 | Jan 到 Dec |
n |
數(shù)字表示的月份,沒有前導(dǎo)零 | 1 到 12 |
t |
指定的月份有幾天 | 28 到 31 |
年 | --- | --- |
L |
是否為閏年 | 如果是閏年為 1 ,否則為 0 |
o |
ISO-8601 格式年份數(shù)字。這和
Y 的值相同,只除了如果 ISO
的星期數(shù)(W )屬于前一年或下一年,則用那一年。(PHP 5.1.0 新加) |
Examples: 1999 or 2003 |
Y |
4 位數(shù)字完整表示的年份 | 例如:1999 或 2003 |
y |
2 位數(shù)字表示的年份 | 例如:99 或 03 |
時(shí)間 | --- | --- |
a |
小寫的上午和下午值 | am 或 pm |
A |
大寫的上午和下午值 | AM 或 PM |
B |
Swatch Internet 標(biāo)準(zhǔn)時(shí) | 000 到 999 |
g |
小時(shí),12 小時(shí)格式,沒有前導(dǎo)零 | 1 到 12 |
G |
小時(shí),24 小時(shí)格式,沒有前導(dǎo)零 | 0 到 23 |
h |
小時(shí),12 小時(shí)格式,有前導(dǎo)零 | 01 到 12 |
H |
小時(shí),24 小時(shí)格式,有前導(dǎo)零 | 00 到 23 |
i |
有前導(dǎo)零的分鐘數(shù) | 00 到 59 > |
s |
秒數(shù),有前導(dǎo)零 | 00 到 59 > |
u |
毫秒 (PHP 5.2.2 新加)。需要注意的是
date() 函數(shù)總是返回
000000 因?yàn)樗唤邮?integer
參數(shù), 而 DateTime::format() 才支持毫秒。
|
示例: 654321 |
時(shí)區(qū) | --- | --- |
e |
時(shí)區(qū)標(biāo)識(shí)(PHP 5.1.0 新加) | 例如:UTC ,GMT ,Atlantic/Azores |
I |
是否為夏令時(shí) | 如果是夏令時(shí)為 1 ,否則為 0 |
O |
與格林威治時(shí)間相差的小時(shí)數(shù) | 例如:+0200 |
P |
與格林威治時(shí)間(GMT)的差別,小時(shí)和分鐘之間有冒號(hào)分隔(PHP 5.1.3 新加) | 例如:+02:00 |
T |
本機(jī)所在的時(shí)區(qū) | 例如:EST ,MDT (【譯者注】在 Windows
下為完整文本格式,例如“Eastern Standard Time”,中文版會(huì)顯示“中國標(biāo)準(zhǔn)時(shí)間”)。 |
Z |
時(shí)差偏移量的秒數(shù)。UTC 西邊的時(shí)區(qū)偏移量總是負(fù)的,UTC 東邊的時(shí)區(qū)偏移量總是正的。 | -43200 到 43200 |
完整的日期/時(shí)間 | --- | --- |
c |
ISO 8601 格式的日期(PHP 5 新加) | 2004-02-12T15:19:21+00:00 |
r |
RFC 822 格式的日期 | 例如:Thu, 21 Dec 2000 16:01:07 +0200 |
U |
從 Unix 紀(jì)元(January 1 1970 00:00:00 GMT)開始至今的秒數(shù) | 參見 time() |
格式字串中不能被識(shí)別的字符將原樣顯示。Z
格式在使用
gmdate() 時(shí)總是返回 0
。
示例 #1 date() 例子
<?php
// 設(shè)定要用的默認(rèn)時(shí)區(qū)。自 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(0, 0, 0, 7, 1, 2000));
/* 在格式參數(shù)中使用常量 */
// 輸出類似:Wed, 25 Sep 2013 15:28:57 -0700
echo date(DATE_RFC2822);
// 輸出類似:2000-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>
在格式字串中的字符前加上反斜線來轉(zhuǎn)義可以避免它被按照上表解釋。如果加上反斜線后的字符本身就是一個(gè)特殊序列,那還要轉(zhuǎn)義反斜線。
示例 #2 在 date() 中轉(zhuǎn)義字符
<?php
// prints something like: Wednesday the 15th
echo date("l \\t\h\e jS");
?>
可以把 date() 和 mktime() 函數(shù)結(jié)合使用來得到未來或過去的日期。
示例 #3 date() 和 mktime() 例子
<?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
?>
注意:
由于夏令時(shí)的緣故,這種方法比簡單地在時(shí)間戳上加減一天或者一個(gè)月的秒數(shù)更可靠。
一些使用 date() 格式化日期的例子。注意要轉(zhuǎn)義所有其它的字符,因?yàn)槟壳坝刑厥夂x的字符會(huì)產(chǎn)生不需要的結(jié)果,而其余字符在 PHP 將來的版本中可能會(huì)被用上。當(dāng)轉(zhuǎn)義時(shí),注意用單引號(hào)以避免類似 \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
$today = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (MySQL DATETIME 格式)
?>
要格式化其它語種的日期,應(yīng)該用 setlocale() 和 strftime() 函數(shù)來代替 date()。
format
輸出的日期 string 格式。 參見下文中的
格式化選項(xiàng)。 同時(shí),還可以使用
預(yù)定義日期常量
,例如:常量 DATE_RSS
表示格式化字符串 'D, d M Y H:i:s'
。
format 字符 |
描述 | 返回值示例 |
---|---|---|
天 | --- | --- |
d |
一個(gè)月中的第幾天,有前導(dǎo) 0 的 2 位數(shù)字 | 從 01 到 31 |
D |
3 個(gè)字符表示的星期幾 | 從 Mon 到 Sun |
j |
一個(gè)月中的第幾天,無前導(dǎo) 0 | 從 1 到 31 |
l (lowercase 'L') |
星期幾,英文全稱 | 從 Sunday 到 Saturday |
N |
ISO-8601 規(guī)定的數(shù)字表示的星期幾(PHP 5.1.0 新加 ) | 從 1 (表示星期一)到 7 (表示星期日) |
S |
一個(gè)月中的第幾天,帶有 2 個(gè)字符表示的英語序數(shù)詞。 |
st , nd , rd 或者
th 。 可以和 j 聯(lián)合使用。
|
w |
數(shù)字表示的星期幾 | 從 0 (星期日) 到 6 (星期六) |
z |
一年中的第幾天,從 0 開始計(jì)數(shù) | 從 0 到 365 |
周 | --- | --- |
W |
ISO-8601 規(guī)范的一年中的第幾周,周一視為一周開始。(PHP 4.1.0 新加) | 示例: 42 (本年第42周) |
月 | --- | --- |
F |
月份英文全拼,例如:January 或 March | 從 January 到 December |
m |
帶有 0 前導(dǎo)的數(shù)字表示的月份 | 從 01 到 12 |
M |
3 個(gè)字符表示的月份的英文簡拼 | 從 Jan 到 Dec |
n |
月份的數(shù)字表示,無前導(dǎo) 0 | 1 through 12 |
t |
給定月份中包含多少天 | 從 28 到 31 |
年 | --- | --- |
L |
是否為閏年 | 如果是閏年,則返回 1 ,反之返回 0 。 |
o |
ISO-8601 規(guī)范的年份,同
Y 格式。有一種情況除外:當(dāng) ISO 的周數(shù)(W )屬于前一年或者后一年時(shí),會(huì)返回前一年或者后一年的年份數(shù)字表達(dá)。
屬于前一年或者后一年時(shí),會(huì)返回前一年或者后一年的年份數(shù)字表達(dá)。
(PHP 5.1.0 新加) |
示例:1999 或 2003 |
Y |
4 位數(shù)字的年份 | 示例:1999 或 2003 |
y |
2 位數(shù)字的年份 | 示例: 99 或 03 |
時(shí)間 | --- | --- |
a |
上午還是下午,2 位小寫字符 | am 或 pm |
A |
上午還是下午,2 位大寫字符 | AM 或 PM |
B |
斯沃琪因特網(wǎng)時(shí)間 | 從 000 到 999 |
g |
小時(shí),12時(shí)制,無前導(dǎo) 0 | 從 1 到 12 |
G |
小時(shí),24時(shí)制,無前導(dǎo) 0 | 從 0 到 23 |
h |
小時(shí),12時(shí)制,有前導(dǎo) 0 的 2 位數(shù)字 | 從 01 到 12 |
H |
小時(shí),24時(shí)制,有前導(dǎo) 0 的 2 位數(shù)字 | 00 through 23 |
i |
分鐘,有前導(dǎo) 0 的 2 位數(shù)字 | 從 00 到 59 |
s |
秒,有前導(dǎo) 0 的 2 位數(shù)字 | 從 00 到 59 |
u |
毫秒 (PHP 5.2.2 新加) | 示例: 654321 |
時(shí)區(qū) | --- | --- |
e |
時(shí)區(qū)標(biāo)識(shí)(PHP 5.1.0 新加) | 示例: UTC , GMT , Atlantic/Azores |
I (大寫字母 i) |
是否夏令時(shí) | 如果是夏令時(shí)則返回 1 ,反之返回 0 。 |
O |
和格林威治時(shí)間(GMT)的時(shí)差,以小時(shí)為單位 | 示例: +0200 |
P |
和格林威治時(shí)間(GMT)的時(shí)差,包括小時(shí)和分鐘,小時(shí)和分鐘之間使用冒號(hào)(:)分隔(PHP 5.1.3 新加) | 示例: +02:00 |
T |
時(shí)區(qū)縮寫 | 示例:EST , MDT ... |
Z |
以秒為單位的時(shí)區(qū)偏移量。UTC 以西的時(shí)區(qū)返回負(fù)數(shù),UTC 以東的時(shí)區(qū)返回正數(shù)。 | 從 -43200 到 50400 |
完整的日期/時(shí)間 | --- | --- |
c |
ISO 8601 日期及時(shí)間(PHP 5 新加) | 2004-02-12T15:19:21+00:00 |
r |
? RFC 2822 格式的日期和時(shí)間 | 示例:Thu, 21 Dec 2000 16:01:07 +0200 |
U |
自 1970 年 1 月 1 日 0 時(shí) 0 分 0 秒(GMT 時(shí)間)以來的時(shí)間,以秒為單位 | 參見time() |
格式化字符串中的不可識(shí)別字符將原樣輸出。
當(dāng)使用 gmdate() 函數(shù)時(shí), Z
格式永遠(yuǎn)返回 0
。
注意:
由于本函數(shù)僅接受 integer 類型的時(shí)間戳參數(shù),所以
u
格式僅在使用 date_format() 函數(shù)并且使用 date_create() 函數(shù)創(chuàng)建時(shí)間戳?xí)r才是有用的。
timestamp
可選的 timestamp
參數(shù)是一個(gè) int 的 Unix
時(shí)間戳,如未指定或是 null
,參數(shù)值默認(rèn)為當(dāng)前本地時(shí)間。也就是說,其值默認(rèn)為
time() 的返回值。
返回格式化后的日期時(shí)間的字符串表達(dá)。
如果 timestamp
參數(shù)不是一個(gè)有效數(shù)值,則返回 false
并引發(fā) E_WARNING
級(jí)別的錯(cuò)誤。
在每次調(diào)用日期/時(shí)間函數(shù)時(shí),如果時(shí)區(qū)無效則會(huì)引發(fā) E_NOTICE
錯(cuò)誤。參見
date_default_timezone_set()。
版本 | 說明 |
---|---|
5.1.0 | 時(shí)間戳的有效取值范圍為 GMT 時(shí)間的 1901 年 12 月 13 日至 GMT 時(shí)間的 2038 年 1 月 19 日。 (32 位有符號(hào)整數(shù)的取值范圍)。 但是,在 PHP 5.1.0 之前的版本,在某些系統(tǒng)(例如 Windows)上有效取值范圍為 1970 年 1 月 1 日至 2038 年 1 月 19 日。 |
5.1.0 |
現(xiàn)在發(fā)布 |
5.1.1 |
format 參數(shù)標(biāo)準(zhǔn)的可用日期/時(shí)間格式常量見: 常量
|
示例 #5 date() 函數(shù)示例
<?php
// 設(shè)置默認(rèn)時(shí)區(qū)。PHP 5.1 之后版本可用
date_default_timezone_set('UTC');
// 輸出類似: Monday
echo date("l");
// 輸出類似:Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');
// 輸出:July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));
/* 使用格式常量 */
// 輸出類似: Mon, 15 Aug 2005 15:12:46 UTC
echo date(DATE_RFC822);
// 輸出類似:2000-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>
可以使用反斜線進(jìn)行轉(zhuǎn)義來阻止函數(shù)解析格式字符串中的可識(shí)別字符。 如果反斜線和要轉(zhuǎn)義的字符連在一起依然是一個(gè)有效的字符序列,那么需要對(duì) 反斜線再次進(jìn)行轉(zhuǎn)義。
示例 #6 對(duì) date() 函數(shù)中的格式字符串進(jìn)行轉(zhuǎn)義
<?php
// 輸出類似: Wednesday the 15th
echo date('l \t\h\e jS');
?>
可以聯(lián)合使用 date() 和 mktime() 函數(shù) 來構(gòu)造之前或者之后的日期時(shí)間。
示例 #7 date() 和 mktime() 聯(lián)合使用示例
<?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
?>
注意:
由于存在夏令時(shí)時(shí)間, 所以此方案相對(duì)于直接在時(shí)間戳上加/減秒數(shù) 要更加可靠。
date() 函數(shù)格式化的一些示例。 需要注意的是,即使是對(duì)于當(dāng)前來說并不具有特殊含義的字符, 也要像對(duì)待具有特殊含義的字符那樣進(jìn)行轉(zhuǎn)義,以避免函數(shù)返回非預(yù)期的值。 因?yàn)榭赡茉趯淼?PHP 版本中,這些字符會(huì)被賦予特殊的含義。 進(jìn)行轉(zhuǎn)義的時(shí)候,請(qǐng)確保使用單引號(hào),以避免 \n 被解釋為換行符號(hào)。
示例 #8 date() 函數(shù)格式化
<?php
// 假設(shè)今天是 2001 年 3 月 10 日下午 5 點(diǎn) 16 分 18 秒,
// 并且位于山區(qū)標(biāo)準(zhǔn)時(shí)間(MST)時(shí)區(qū)
$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'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$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 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month
$today = date("H:i:s"); // 17:16:18
?>
如果需要將日期時(shí)間格式化為其他語言,你應(yīng)該使用 setlocale() 和 strftime() 函數(shù) 來替代 date() 函數(shù)。
注意:
使用 strtotime() 函數(shù)將一個(gè)字符串表達(dá)的日期時(shí)間轉(zhuǎn)換為時(shí)間戳。 另外,一些數(shù)據(jù)庫產(chǎn)品也提供了將日期時(shí)間格式轉(zhuǎn)換為時(shí)間戳的函數(shù)。 (例如 MySQL 中的 ? UNIX_TIMESTAMP 函數(shù))。
從 PHP 5.1 版本開始,請(qǐng)求的開始時(shí)間可以從變量 $_SERVER['REQUEST_TIME'] 中獲取。