php strftime函数的详细用法

2018-09-07 14:24

阅读:230

  定义和用法

  strftime() 函数根据区域设置格式化本地时间/日期。

  语法

  strftime(format,timestamp)参数 描述
format 可选。规定如何返回结果。
timestamp 可选。
提示和注释
提示:与 gmstrftime() 的行为相同,不同的是返回时间是本地时间。

  例子

  输出 strftime() 和 gmstrftime() 的结果:

   <?php教程 echo(strftime(%b %d %Y %X, mktime(20,0,0,12,31,98))); echo(gmstrftime(%b %d %Y %X, mktime(20,0,0,12,31,98))); //输出当前日期、时间和时区 echo(gmstrftime(It is %a on %b %d, %Y, %X time zone: %Z,time())); ?>

  strftime()函数可以把YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其它形式的字符串。
strftime()的语法是strftime(格式, 日期/时间, 修正符, 修正符, ...)

  它可以用以下的符号对日期和时间进行格式化:

   %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(for the 13th full week of the year) %V %V - 本年第几周的 ISO-8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。) 01到53(where 53 accounts for an overlapping week) %W 本年的第几周数,从第一周的第一个星期一作为第一天开始 46(for the 46th week of the year beginning with a Monday) 月 --- --- %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 Same as %Y-%m-%d (commonly used in database datestamps) 比如: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) --- %% 文字上的百分字符(%)

  这个参数的最大长度是 1023 个字符。

  Warning
尽管 ISO 9889:1999(当前的 C 标准)明确指出一周从星期一开始,但是 Sun Solaris 的一周似乎从星期天开始并作为 1。所以 %u 的结果也许不会和手册里描述得一样。

  Warning
仅针对 Windows:这个函数里 %e 修饰符修饰符还不能支持 Windows。 为了得到这个值可以用 %#d 修饰符来代替。下例说明了如何写一个跨平台支持的函数。

  Warning
仅针对 Mac OS X:这个函数里 %P 修饰符还不能支持 Mac OS X。

  timestamp
可选的 timestamp 参数是一个 integer 的 Unix 时间戳,如未指定,参数值默认为当前本地时间。也就是说,其值默认为 time() 的返回值。

  strftime()的用法举例如下:

  select strftime(%Y.%m.%d %H:%M:%S,now,localtime);
结果:2018.06.21 21:41:09
其实更好的用法是这样的,比如统,本月或本年的支出:
select strftime(%Y-%m,日期) as 月份,sum(支出) as 月支出 from 流水帐 group by 月份;

  Example #1 strftime() locale examples

   <?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); ?>

  Example #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; ?>

  Example #3 Cross platform compatible example using the %e modifier

   <?php // Jan 1: results in: %e%1% (%%, e, %%, %e, %%) $format = %%e%%%e%%; // Check for Windows to find and replace the %e // modifier correctly if (strtoupper(substr(PHP_OS, 0, 3)) == WIN) { $format = preg_replace(#(?<!%)((?:%%)*)%e#, \1%#d, $format); } echo strftime($format); ?>

  Example #4 Display all known and unknown formats.

   <?php // Describe the formats. $strftimeFormats = array( A => A full textual representation of the day, B => Full month name, based on the locale, C => Two digit representation of the century (year divided by 100, truncated to an integer), D => Same as %m/%d/%y, E => , F => Same as %Y-%m-%d, G => The full four-digit version of %g, H => Two digit representation of the hour in 24-hour format, I => Two digit representation of the hour in 12-hour format, J => , K => , L => , M => Two digit representation of the minute, N => , O => , P => lower-case am or pm based on the given time, Q => , R => Same as %H:%M, S => Two digit representation of the second, T => Same as %H:%M:%S, U => Week number of the given year, starting with the first Sunday as the first week, V => ISO-8601:1988 week number of the given year, starting with the first week of the year with at least 4 weekdays, with Monday being the start of the week, W => A numeric representation of the week of the year, starting with the first Monday as the first week, X => Preferred time representation based on locale, without the date, Y => Four digit representation for the year, Z => The time zone offset/abbreviation option NOT given by %z (depends on operating system), a => An abbreviated textual representation of the day, b => Abbreviated month name, based on the locale, c => Preferred date and time stamp based on local, d => Two-digit day of the month (with leading zeros), e => Day of the month, with a space preceding single digits, f => , g => Two digit representation of the year going by ISO-8601:1988 standards (see %V), h => Abbreviated month name, based on the locale (an alias of %b), i => , j => Day of the year, 3 digits with leading zeros, k => Hour in 24-hour format, with a space preceding single digits, l => Hour in 12-hour format, with a space preceding single digits, m => Two digit representation of the month, n => A newline character (\n), o => , p => UPPER-CASE AM or PM based on the given time, q => , r => Same as %I:%M:%S %p, s => Unix Epoch Time timestamp, t => A Tab character (\t), u => ISO-8601 numeric representation of the day of the week, v => , w => Numeric representation of the day of the week, x => Preferred date representation based on locale, without the time, y => Two digit representation of the year, z => Either the time zone offset from UTC or the abbreviation (depends on operating system), % => A literal percentage character (%), ); // Results. $strftimeValues = array(); // Evaluate the formats whilst suppressing any errors. foreach($strftimeFormats as $format => $description){ if (False !== ($value = @strftime(%{$format}))){ $strftimeValues[$format] = $value; } } // Find the longest value. $maxValueLength = 2 + max(array_map(strlen, $strftimeValues)); // Report known formats. foreach($strftimeValues as $format => $value){ echo Known format : {$format} = , str_pad({$value}, $maxValueLength), ( {$strftimeFormats[$format]} )\n; } // Report unknown formats. foreach(array_diff_key($strftimeFormats, $strftimeValues) as $format => $description){ echo Unknown format : {$format} , str_pad( , $maxValueLength), ($description ? ( {$description} ) : ), \n; } ?>

  下面是其他网友的补充

  php strftime()的使用

  string strftime ( string format[,inttimestamp = time() ] )

  返回用给定的格式字串对给出的 timestamp 进行格式输出后的字符串。如果没有给出时间戳则用当前的本地时间。

  Example1:

   <?php echo 本年中的第· . strftime(%W, strtotime(+2 week midnight -0 second)) . ·周; ?>

  本年中的第·31·周

  Example2:

   <?php echo 現在時間是: . strftime(%d.%B %Y %H:%M:%S, time()); ?>

  現在時間是:20.July 2015 17:01:26

  Example3:

   <?php echo 日期時間格式化為: . strftime(%d.%B %Y %H:%M:%S, strtotime(2018-10-15)); ?>

  日期時間格式化為:15.October 2018 00:00:00


评论


亲,登录后才可以留言!