strftime

(PHP 3, PHP 4, PHP 5)

strftime -- 根據區功能變數設定格式化本地時間/日期

說明

string strftime ( string format [, int timestamp] )

返回用給定的格式字串對給出的 timestamp 進行格式輸出後的字串。若果沒有給出時間戳則用現用的的本地時間。月份和星期幾以及其它和語系有關的字串寫法和用 setlocale() 設定的現用的的區功能變數有關。

格式字串能識別下列轉換旗標:

  • %a - 現用的區功能變數星期幾的簡寫

  • %A - 現用的區功能變數星期幾的全稱

  • %b - 現用的區功能變數月份的簡寫

  • %B - 現用的區功能變數月份的全稱

  • %c - 現用的區功能變數偏好的日期時間表達

  • %C - 世紀值(年份除以 100 後取整,範圍從 00 到 99)

  • %d - 月份中的第幾天,十進位數字(範圍從 01 到 31)

  • %D - 和 %m/%d/%y 一樣

  • %e - 月份中的第幾天,十進位數字,一位的數字前會加上一個空格(範圍從 ' 1' 到 '31')

  • %g - 和 %G 一樣,但是沒有世紀

  • %G - 4 位數的年份,符合 ISO 星期數(參見 %V)。和 %V 的格式和值一樣,只除了若果 ISO 星期數屬於前一年或是後一年,則使用那一年。

  • %h - 和 %b 一樣

  • %H - 24 小時制的十進位小時數(範圍從 00 到 23)

  • %I - 12 小時制的十進位小時數(範圍從 00 到 12)

  • %j - 年份中的第幾天,十進位數(範圍從 001 到 366)

  • %m - 十進位月份(範圍從 01 到 12)

  • %M - 十進位分鐘數

  • %n - 換行符

  • %p - 根據給定的時間值為 `am' 或 `pm',或是現用的區功能變數設定中的相應字串

  • %r - 用 a.m. 和 p.m. 符號的時間

  • %R - 24 小時符號的時間

  • %S - 十進位秒數

  • %t - 製表符

  • %T - 現用的時間,和 %H:%M:%S 一樣

  • %u - 星期幾的十進位數表達 [1,7],1 表示星期一

    警示

    儘管 ISO 9889:1999(現用的的 C 標準)明確指出一周從星期一開始,但是 Sun Solaris 的一周似乎從星期天開始並作為 1。

  • %U - 本年的第幾周,從第一周的第一個星期天作為第一天開始

  • %V - 本年第幾周的 ISO 8601:1988 格式,範圍從 01 到 53,第 1 周是本年第一個至少還有 4 天的星期,星期一作為每週的第一天。(用 %G 或是 %g 作為指定時間戳相應周數的年份組成。)

  • %W - 本年的第幾周數,從第一周的第一個星期一作為第一天開始

  • %w - 星期中的第幾天,星期天為 0

  • %x - 現用的區功能變數偏好的時間表示法,不內含時間

  • %X - 現用的區功能變數偏好的時間表示法,不內含日期

  • %y - 沒有世紀數的十進位年份(範圍從 00 到 99)

  • %Y - 內含世紀數的十進位年份

  • %Z 或 %z - 時區名或縮寫

  • %% - 文字上的 `%' 字元

注: 可能不是所有的轉換旗標都被 C 庫檔案支援,這種情況下 PHP 的 strftime() 也不支援。此外,不是所有的平台都支援負的時間戳,因此日期的範圍可能限定在不早於 Unix 紀元。這意味著例如 %e, %T,%R 和 %D(可能更多)以及早於 Jan 1, 1970 的時間在 Windows,一些 Linux 發行版本,以及其它幾個動作系統中無效。對於 Windows 系統,所支援的轉換旗標可在 MSDN 網站找到。

例子 1. strftime() 區功能變數的例子

<?php
setlocale
(LC_TIME"C");
echo 
strftime("%A");
setlocale(LC_TIME"fi_FI");
echo 
strftime(" in Finnish is %A,");
setlocale(LC_TIME"fr_FR");
echo 
strftime(" in French %A and");
setlocale(LC_TIME"de_DE");
echo 
strftime(" in German %A.\n");
?>
本例在你的系統中安裝有各自的區功能變數設定後才能工作。

注: %G 和 %V,若果數字編號系統未能充分理解,基於 ISO 8601:1988 的星期數可能得出未預期的結果。見上面的 %V 和以下的例子。

例子 2. ISO 8601:1988 week number example

<?php
/*     December 2002 / January 2003
ISOWk  M   Tu  W   Thu F   Sa  Su
----- ----------------------------
51     16  17  18  19  20  21  22
52     23  24  25  26  27  28  29
1      30  31   1   2   3   4   5
2       6   7   8   9  10  11  12
3      13  14  15  16  17  18  19   */

// Outputs: 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/28/2002")) . "\n";

// Outputs: 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/30/2002")) . "\n";

// Outputs: 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";

// Outputs: 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";



/*     December 2004 / January 2005
ISOWk  M   Tu  W   Thu F   Sa  Su
----- ----------------------------
51     13  14  15  16  17  18  19
52     20  21  22  23  24  25  26
53     27  28  29  30  31   1   2
1       3   4   5   6   7   8   9
2      10  11  12  13  14  15  16   */

// Outputs: 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";

// Outputs: 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";

// Outputs: 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";

// Outputs: 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";

?>

參見 setlocale()mktime()strptime() 以及 Open Group specification of strftime()