PHP strftime 日期时间函数

  • 定义和用法

    strftime - 根据区域设置格式化本地时间/日期
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
  • 语法

    strftime ( string $format [, int $timestamp = time() ] )   
    
    返回用给定的格式字串对给出的 timestamp 进行格式输出后的字符串。如果没有给出时间戳则用当前的本地时间。月份和星期几以及其它和语言有关的字符串写法和用 setlocale() 设定的当前的区域有关。 可能不是所有的转换标记都被 C 库文件支持,这种情况下 PHP 的 strftime() 也不支持。此外,不是所有的平台都支持负的时间戳,因此日期的范围可能限定在不早于 Unix 纪元。这意味着例如 %e, %T,%R 和 %D(可能更多)以及早于 Jan 1, 1970 的时间在 Windows,一些 Linux 发行版本,以及其它几个操作系统中无效。对于 Windows 系统,所支持的转换标记可在 » MSDN 网站找到。
  • 参数

    参数 必需的 描述
    format 格式字符串,这个参数的最大长度是 1023 个字符。
    警告: 尽管 ISO 9889:1999(当前的 C 标准)明确指出一周从星期一开始,但是 Sun Solaris 的一周似乎从星期天开始并作为 1。所以 %u 的结果也许不会和手册里描述得一样。
    警告: 仅针对 Windows:这个函数里 %e 修饰符修饰符还不能支持 Windows。 为了得到这个值可以用 %#d 修饰符来代替。下例说明了如何写一个跨平台支持的函数。
    警告: 仅针对 Mac OS X:这个函数里 %P 修饰符还不能支持 Mac OS X。
    格式字符 描述 例子
    %a 当前区域星期几的简写 Sun 到 Sat
    %A 当前区域星期几的全称 Sunday 到 Saturday
    %d 月份中的第几天,十进制数字(范围从 01 到 31) 01 到 31
    %e 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ' 1' 到 '31') 在 Windows 上尚未按描述实现。更多信息见上方。 1 到 31
    %j 年份中的第几天,带前导零的三位十进制数(范围从 001 到 366) 001 到 366
    %u 符合 ISO-8601 星期几的十进制数表达 [1,7],1 表示星期一 1 (星期一) 到 7 (星期日)
    %w 星期中的第几天,星期天为 0 0 (星期天) 到 6 (星期六)
    %U 本年的第几周,从第一周的第一个星期天作为第一天开始 13 (一年的第13个整周)
    %V %V - 本年第几周的 ISO-8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。) 01 到 53 (其中53个星期重叠)
    %W 本年的第几周数,从第一周的第一个星期一作为第一天开始 46 (从星期一开始的一年的第46周)
    %b 当前区域月份的简写 Jan 到 Dec
    %B 当前区域月份的全称 January 到 December
    %h 当前区域月份的简写(%b 的别名) Jan 到 Dec
    %m 两位数的月份 01 (是一月份) 到 12 (是十二月份)
    %C 两位数显示世纪(年份除以 100,截成整数) 19 是 20 世纪
    %g 2 位数的年份,符合 ISO-8601:1988 星期数(参见 %V)。和 %V 的格式和值一样,只除了如果 ISO 星期数属于前一年或者后一年,则使用那一年。 比如:2009年1月6日那一周是 09。
    %G %g 的完整四位数版本 比如:2009年1月3日那一周是 2008.
    %y 两位数显示年份 比如: 09 是 2009,79 是 1979
    %Y 四位数显示年份 比如: 2038
    时间
    %H 以 24 小时格式显示两位小时数 00 到 23
    %I 以 12 小时格式显示两位小时数 01 到 12
    %l ('L' 的小写) 以 12 小时格式显示小时数,单个数字前含空格 1 到 12
    %M 两位的分钟数 00 到 59
    %p 指定时间的大写 “AM” 或 “PM” 比如: 00:31 是 AM ,22:23 是PM
    %P 指定时间的小写 “am” 或 “pm” 比如:00:31 是 am ,22:23 是pm
    %r 和 "%I:%M:%S %p" 一样 比如: 21:34:17 是 09:34:17 PM
    %R 和 "%H:%M" 一样 比如: 12:35 AM 是 00:35,4:44 PM 是 16:44
    %S 两位数字表示秒 00 到 59
    %T 和 "%H:%M:%S" 一样 比如: 09:34:17 PM 是 21:34:17
    %X 当前区域首选的时间表示法,不包括日期 例如: 03:59:16 或 15:59:16
    %z 从 UTC 的时区偏移 或 简写(由操作系统决定) 比如: 东部时间是 -0500 或 EST
    %Z %z 没有给出的 UTC 的时区偏移 或 简写(由操作系统决定) 比如: -0500 或 EST 是东部时间
    时间和日期戳
    %c 当前区域首选的日期时间表达 比如: 2009 年 2 月 5 日上午 12:45:10 是 Tue Feb 5 00:45:10 2009
    %D 和 "%m/%d/%y" 一样 比如: 2009 年 2 月 5 日是 02/05/09
    %F 形如 "%Y-%m-%d" (通常在数据库日期戳中使用) 比如:2009 年 2 月 5 日是 2009-02-05
    %s Unix纪元的时间戳(和 time() 函数一样) 比如: 1979 年 9 月 10 日上午 8 点 40 分 00 秒是 305815200
    %x 当前区域首选的时间表示法,不包括时间 比如: 2009 年 2 月 5 日是 02/05/09
    其他
    %n 换行符("\n") ---
    %t Tab 字符("\t") ---
    %% 文字上的百分字符("%") ---
    timestamp 可选的 timestamp 参数是一个整型的 Unix 时间戳,如未指定,参数值默认为当前本地时间。也就是说,其值默认为 time() 的返回值。
  • 返回值

    根据指定的 timestamp 或未给出 timestamp 是使用当前本地时间, 返回 format 格式化的字符。 月份、星期名和其他与语言相关的字符串遵守 setlocale() 设置的当前区域设置。
    在每 次调用日期/时间函数时,如果时区无效则会引发 E_NOTICE 错误,如果使用系统设定值或 TZ 环境变量,则会引发 E_STRICT 或 E_WARNING 消息。参见 date_default_timezone_set()。 由于输出依赖于 C 库,所以一些转换标记并不被支持。 在 Windows 上,使用未知的转换标记将导致 5 E_WARNING 信息,并返回 FALSE。 在其他的操作系统上,你可能不能得到任何 E_WARNING 信息, 并且可能输出未经转换的转换标记。
  • 示例

    <?php
    setlocale(LC_TIME, "C");
    echo strftime("%A");
    echo '<br/>';
    setlocale(LC_TIME, "fi_FI");
    echo '<br/>';
    echo strftime(" 在芬兰是: %A,");
    echo '<br/>';
    setlocale(LC_TIME, "fr_FR");
    echo '<br/>';
    echo strftime(" 在法国是: %A ");
    echo '<br/>';
    setlocale(LC_TIME, "de_DE");
    echo '<br/>';
    echo strftime(" 在德国是: %A");
    
    尝试一下
  • 相关函数

    setlocale() - 设置地区信息
    mktime() - 取得一个日期的 Unix 时间戳
    strptime() - 解析由 strftime 生成的日期/时间
    gmstrftime() - 根据区域设置格式化 GMT/UTC 时间/日期