Detailed Usage of php strftime Function

  • 2021-10-24 19:11:14
  • OfStack

Definition and usage

The strftime () function formats the local time/date based on the locale.

Grammar

strftime (format, timestamp) Parameter Description
format is optional. Specifies how the results are returned.
timestamp is optional.
Tips and Notes
Tip: It behaves the same as gmstrftime () except that the return time is local time.

Example

Output the results of strftime () and gmstrftime ():


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

// Output the current date, time and time zone 
echo(gmstrftime("It is %a on %b %d, %Y, %X time zone: %Z",time()));
?>

The strftime () function converts a date string in the YYYY-MM-DD HH: MM: SS format to other strings.
The syntax of strftime () is strftime (format, date/time, modifier, modifier,...)

It can format dates and times with the following symbols:

%a 当前区域星期几的简写 Sun 到 Sat
%A 当前区域星期几的全称 Sunday 到 Saturday
%d 月份中的第几天,10进制数字(范围从 01 到 31) 01 到 31
%e 月份中的第几天,10进制数字,1位的数字前会加上1个空格(范围从 ' 1' 到 '31') 在 Windows 上尚未按描述实现。更多信息见下方。 1 到 31
%j 年份中的第几天,带前导零的3位10进制数(范围从 001 到 366) 001 到 366
%u 符合 ISO-8601 星期几的10进制数表达 [1,7],1 表示星期1 1 (星期1) 到 7 (星期日)
%w 星期中的第几天,星期天为 0 0 (星期天) 到 6 (星期6)
--- ---
%U 本年的第几周,从第1周的第1个星期天作为第1天开始 13 (for the 13th full week of the year)
%V %V - 本年第几周的 ISO-8601:1988 格式,范围从 01 到 53,第 1 周是本年第1个至少还有 4 天的星期,星期1作为每周的第1天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。) 01 到 53 (where 53 accounts for an overlapping week)
%W 本年的第几周数,从第1周的第1个星期1作为第1天开始 46 (for the 46th week of the year beginning with a Monday)
--- ---
%b 当前区域月份的简写 Jan 到 Dec
%B 当前区域月份的全称 January 到 December
%h 当前区域月份的简写(%b 的别名) Jan 到 Dec
%m 两位数的月份 01 (是1月份) 到 12 (是102月份)
--- ---
%C 两位数显示世纪(年份除以 100,截成整数) 19 是 20 世纪
%g 2 位数的年份,符合 ISO-8601:1988 星期数(参见 %V)。和 %V 的格式和值1样,只除了如果 ISO 星期数属于前1年或者后1年,则使用那1年。 比如:2009年1月6日那1周是 09。
%G %g 的完整4位数版本 比如:2009年1月3日那1周是 2008.
%y 两位数显示年份 比如: 09 是 2009,79 是 1979
%Y 4位数显示年份 比如: 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" 1样 比如: 21:34:17 是 09:34:17 PM
%R 和 "%H:%M" 1样 比如: 12:35 AM 是 00:35,4:44 PM 是 16:44
%S 两位数字表示秒 00 到 59
%T 和 "%H:%M:%S" 1样 比如: 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" 1样 比如: 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() 函数1样) 比如: 1979 年 9 月 10 日上午 8 点 40 分 00 秒是 305815200
%x 当前区域首选的时间表示法,不包括时间 比如: 2009 年 2 月 5 日是 02/05/09
其他 --- ---
%n 换行符("\n") ---
%t Tab 字符("\t") ---
%% 文字上的百分字符("%")

The maximum length of this parameter is 1023 characters.

Warning
Although ISO 9889: 1999 (the current C standard) explicitly states that the week begins on Monday, the week of Sun Solaris appears to begin on Sunday and is considered as 1. Therefore, the results of% u may not be the same as those described in the manual.

Warning
For Windows only: The% e modifier in this function does not yet support Windows. To get this value, you can use the% # d modifier instead. The following example shows how to write a cross-platform supported function.

Warning
For Mac OS X only: Mac OS X is not supported by the% P modifier in this function.

timestamp
The optional timestamp parameter is an Unix timestamp of integer. If not specified, the parameter value defaults to the current local time. That is, its value defaults to the return value of time ().

Examples of the use of strftime () are as follows:

select strftime('%Y.%m.%d %H:%M:%S','now','localtime');
Results: 2018.06.21 21:41: 09
In fact, a better usage is like this, for example, the expenditure this month or this year:
select strftime ('% Y-% m', Date) as, sum (Expenditure) as Month Expenditure from Journal group by Month;

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";
}
?>

The following are the additions of other netizens

Use of php strftime ()

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

Returns the string after the given timestamp is formatted with the given format string. If no timestamp is given, the current local time is used.

Example1:


<?php
echo ' The first in this year ' . strftime('%W', strtotime('+2 week midnight -0 second')) . ' Zhou ';
?>

Week 31 of the year

Example2:


<?php
echo " Here is: " . strftime('%d.%B %Y %H:%M:%S', time());
?>

At: 20. July 2015 17:01:26

Example3:


<?php
echo ' Date formatting :' . strftime('%d.%B %Y %H:%M:%S', strtotime('2018-10-15'));
?>

Date Formatting: 15. October 2018 00: 00:00


Related articles: