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 时间/日期