date
(PHP 4, PHP 5, PHP 7, PHP 8)
date — 格式化一個本地時間/日期
說明
$format
, int $timestamp
= ?): string
返回將整數 timestamp
按照給定的格式字串而產生的字串。如果沒有給出時間戳則使用本地當前時間。換句話說,timestamp
是可選的,預設值為 time()。
自 PHP 5.1.1 起有幾個有用的常量可用作標準的日期/時間格式來指定
format
參數。
自 PHP 5.1 起在 $_SERVER['REQUEST_TIME'] 中儲存了發起該請求時刻的時間戳。
注意:
有效的時間戳典型範圍是格林威治時間 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 函式)。
format 字元 |
說明 | 返回值例子 |
---|---|---|
日 | --- | --- |
d |
月份中的第幾天,有前導零的 2 位數字 | 01 到 31 |
D |
星期中的第幾天,文字表示,3 個字母 | Mon 到 Sun |
j |
月份中的第幾天,沒有前導零 | 1 到 31 |
l (「L」的小寫字母) |
星期幾,完整的文字格式 | Sunday 到 Saturday |
N |
ISO-8601 格式數字表示的星期中的第幾天(PHP 5.1.0 新加) | 1 (表示星期一)到 7 (表示星期天) |
S |
每月天數後面的英文後綴,2 個字元 | st ,nd ,rd
或者 th 。可以和 j 一起用 |
w |
星期中的第幾天,數字表示 | 0 (表示星期天)到 6 (表示星期六) |
z |
年份中的第幾天 | 0 到 365 |
星期 | --- | --- |
W |
ISO-8601 格式年份中的第幾周,每週從星期一開始(PHP 4.1.0 新加的) | 例如:42 (當年的第 42 周) |
月 | --- | --- |
F |
月份,完整的文字格式,例如 January 或者 March | January 到 December |
m |
數字表示的月份,有前導零 | 01 到 12 |
M |
三個字母縮寫表示的月份 | Jan 到 Dec |
n |
數字表示的月份,沒有前導零 | 1 到 12 |
t |
指定的月份有幾天 | 28 到 31 |
年 | --- | --- |
L |
是否為閏年 | 如果是閏年為 1 ,否則為 0 |
o |
ISO-8601 格式年份數字。這和
Y 的值相同,只除了如果 ISO
的星期數(W )屬於前一年或下一年,則用那一年。(PHP 5.1.0 新加) |
Examples: 1999 or 2003 |
Y |
4 位數字完整表示的年份 | 例如:1999 或 2003 |
y |
2 位數字表示的年份 | 例如:99 或 03 |
時間 | --- | --- |
a |
小寫的上午和下午值 | am 或 pm |
A |
大寫的上午和下午值 | AM 或 PM |
B |
Swatch Internet 標準時 | 000 到 999 |
g |
小時,12 小時格式,沒有前導零 | 1 到 12 |
G |
小時,24 小時格式,沒有前導零 | 0 到 23 |
h |
小時,12 小時格式,有前導零 | 01 到 12 |
H |
小時,24 小時格式,有前導零 | 00 到 23 |
i |
有前導零的分鐘數 | 00 到 59 > |
s |
秒數,有前導零 | 00 到 59 > |
u |
毫秒 (PHP 5.2.2 新加)。需要注意的是
date() 函式總是返回
000000 因為它只接受 integer
參數, 而 DateTime::format() 才支援毫秒。
|
示例: 654321 |
時區 | --- | --- |
e |
時區標識(PHP 5.1.0 新加) | 例如:UTC ,GMT ,Atlantic/Azores |
I |
是否為夏令時 | 如果是夏令時為 1 ,否則為 0 |
O |
與格林威治時間相差的小時數 | 例如:+0200 |
P |
與格林威治時間(GMT)的差別,小時和分鐘之間有冒號分隔(PHP 5.1.3 新加) | 例如:+02:00 |
T |
本機所在的時區 | 例如:EST ,MDT (【譯者注】在 Windows
下為完整文字格式,例如「Eastern Standard Time」,中文版會顯示「中國標準時間」)。 |
Z |
時差偏移量的秒數。UTC 西邊的時區偏移量總是負的,UTC 東邊的時區偏移量總是正的。 | -43200 到 43200 |
完整的日期/時間 | --- | --- |
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 紀元(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(0, 0, 0, 7, 1, 2000));
/* 在格式參數中使用常量 */
// 輸出類似: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));
?>
在格式字串中的字元前加上反斜線來轉義可以避免它被按照上表解釋。如果加上反斜線后的字元本身就是一個特殊序列,那還要轉義反斜線。
示例 #2 在 date() 中轉義字元
<?php
// prints something like: Wednesday the 15th
echo date("l \\t\h\e jS");
?>
可以把 date() 和 mktime() 函式結合使用來得到未來或過去的日期。
示例 #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);
?>
注意:
由於夏令時的緣故,這種方法比簡單地在時間戳上加減一天或者一個月的秒數更可靠。
一些使用 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
$today = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (MySQL DATETIME 格式)
?>
要格式化其它語種的日期,應該用 setlocale() 和 strftime() 函式來代替 date()。
參數
-
format
-
輸出的日期 string 格式。 參見下文中的 格式化選項。 同時,還可以使用 預定義日期常量 ,例如:常量
DATE_RSS
表示格式化字串'D, d M Y H:i:s'
。format
參數字串中可識別下列字元format
字元描述 返回值示例 天 --- --- d
一個月中的第幾天,有前導 0 的 2 位數字 從 01
到31
D
3 個字元表示的星期幾 從 Mon
到Sun
j
一個月中的第幾天,無前導 0 從 1
到31
l
(lowercase 'L')星期幾,英文全稱 從 Sunday
到Saturday
N
ISO-8601 規定的數字表示的星期幾(PHP 5.1.0 新加 ) 從 1
(表示星期一)到7
(表示星期日)S
一個月中的第幾天,帶有 2 個字元表示的英語序數詞。 st
,nd
,rd
或者th
。 可以和j
聯合使用。w
數字表示的星期幾 從 0
(星期日) 到6
(星期六)z
一年中的第幾天,從 0 開始計數 從 0
到365
周 --- --- W
ISO-8601 規範的一年中的第幾周,週一視為一週開始。(PHP 4.1.0 新加) 示例: 42
(本年第42周)月 --- --- F
月份英文全拼,例如:January 或 March 從 January
到December
m
帶有 0 前導的數字表示的月份 從 01
到12
M
3 個字元表示的月份的英文簡拼 從 Jan
到Dec
n
月份的數字表示,無前導 0 1
through12
t
給定月份中包含多少天 從 28
到31
年 --- --- L
是否為閏年 如果是閏年,則返回 1
,反之返回0
。o
ISO-8601 規範的年份,同 Y
格式。有一種情況除外:當 ISO 的週數(W
)屬於前一年或者后一年時,會返回前一年或者后一年的年份數字表達。 屬於前一年或者后一年時,會返回前一年或者后一年的年份數字表達。 (PHP 5.1.0 新加)示例: 1999
或2003
Y
4 位數字的年份 示例: 1999
或2003
y
2 位數字的年份 示例: 99
或03
時間 --- --- a
上午還是下午,2 位小寫字元 am
或pm
A
上午還是下午,2 位大寫字元 AM
或PM
B
斯沃琪因特網時間 從 000
到999
g
小時,12時制,無前導 0 從 1
到12
G
小時,24時制,無前導 0 從 0
到23
h
小時,12時制,有前導 0 的 2 位數字 從 01
到12
H
小時,24時制,有前導 0 的 2 位數字 00
through23
i
分鐘,有前導 0 的 2 位數字 從 00
到59
s
秒,有前導 0 的 2 位數字 從 00
到59
u
毫秒 (PHP 5.2.2 新加) 示例: 654321
時區 --- --- e
時區標識(PHP 5.1.0 新加) 示例: UTC
,GMT
,Atlantic/Azores
I
(大寫字母 i)是否夏令時 如果是夏令時則返回 1
,反之返回0
。O
和格林威治時間(GMT)的時差,以小時為單位 示例: +0200
P
和格林威治時間(GMT)的時差,包括小時和分鐘,小時和分鐘之間使用冒號(:)分隔(PHP 5.1.3 新加) 示例: +02:00
T
時區縮寫 示例: EST
,MDT
...Z
以秒為單位的時區偏移量。UTC 以西的時區返回負數,UTC 以東的時區返回正數。 從 -43200
到50400
完整的日期/時間 --- --- c
ISO 8601 日期及時間(PHP 5 新加) 2004-02-12T15:19:21+00:00 r
» RFC 2822 格式的日期和時間 示例: Thu, 21 Dec 2000 16:01:07 +0200
U
自 1970 年 1 月 1 日 0 時 0 分 0 秒(GMT 時間)以來的時間,以秒為單位 參見time() 格式化字串中的不可識別字符將原樣輸出。 當使用 gmdate() 函式時,
Z
格式永遠返回0
。注意:
由於本函式僅接受 integer 型別的時間戳參數,所以
u
格式僅在使用 date_format() 函式並且使用 date_create() 函式建立時間戳時才是有用的。 -
timestamp
-
可選的
timestamp
參數是一個 int 的 Unix 時間戳,如未指定或是null
,參數值預設為目前本地時間。也就是說,其值預設為 time() 的返回值。
返回值
返回格式化后的日期時間的字串表達。
如果 timestamp
參數不是一個有效數值,則返回 false
並引發 E_WARNING
級別的錯誤。
錯誤/異常
在每次呼叫日期/時間函式時,如果時區無效則會引發 E_NOTICE
錯誤。參見
date_default_timezone_set()。
更新日誌
版本 | 說明 |
---|---|
5.1.0 | 時間戳的有效取值範圍為 GMT 時間的 1901 年 12 月 13 日至 GMT 時間的 2038 年 1 月 19 日。 (32 位有符號整數的取值範圍)。 但是,在 PHP 5.1.0 之前的版本,在某些系統(例如 Windows)上有效取值範圍為 1970 年 1 月 1 日至 2038 年 1 月 19 日。 |
5.1.0 |
現在發佈 |
5.1.1 |
format 參數標準的可用日期/時間格式常量見: 常量
|
範例
示例 #5 date() 函式示例
<?php
// 設定預設時區。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));
?>
可以使用反斜線進行轉義來阻止函式解析格式字串中的可識別字符。 如果反斜線和要轉義的字元連在一起依然是一個有效的字元序列,那麼需要對 反斜線再次進行轉義。
示例 #6 對 date() 函式中的格式字串進行轉義
<?php
// 輸出類似: Wednesday the 15th
echo date('l \t\h\e jS');
?>
可以聯合使用 date() 和 mktime() 函式 來構造之前或者之後的日期時間。
示例 #7 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);
?>
注意:
由於存在夏令時時間, 所以此方案相對於直接在時間戳上加/減秒數 要更加可靠。
date() 函式格式化的一些示例。 需要注意的是,即使是對於目前來說並不具有特殊含義的字元, 也要像對待具有特殊含義的字元那樣進行轉義,以避免函式返回非預期的值。 因為可能在將來的 PHP 版本中,這些字元會被賦予特殊的含義。 進行轉義的時候,請確保使用單引號,以避免 \n 被解釋為換行符號。
示例 #8 date() 函式格式化
<?php
// 假設今天是 2001 年 3 月 10 日下午 5 點 16 分 18 秒,
// 並且位於山區標準時間(MST)時區
$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
?>
如果需要將日期時間格式化為其他語言,你應該使用 setlocale() 和 strftime() 函式 來替代 date() 函式。
註釋
注意:
使用 strtotime() 函式將一個字串表達的日期時間轉換為時間戳。 另外,一些數據庫產品也提供了將日期時間格式轉換為時間戳的函式。 (例如 MySQL 中的 » UNIX_TIMESTAMP 函式)。
從 PHP 5.1 版本開始,請求的開始時間可以從變數 $_SERVER['REQUEST_TIME'] 中獲取。
參見
- gmdate() - 格式化一個 GMT/UTC 日期/時間
- idate() - 將本地時間日期格式化為整數
- getdate() - 取得日期/時間資訊
- getlastmod() - 獲取頁面最後修改的時間
- mktime() - 取得一個日期的 Unix 時間戳
- strftime() - 根據區域設定格式化本地時間/日期
- time() - 返回目前的 Unix 時間戳
- strtotime() - 將任何字串的日期時間描述解析為 Unix 時間戳
- 預定義的日期時間常量