php strftime函数的详细用法


Posted in PHP onJune 21, 2018

定义和用法

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 "?在?r?是:" . strftime('%d.%B %Y %H:%M:%S', time());
?>

?在?r?是:20.July 2015 17:01:26

Example3:

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

日期?r?格式化??15.October 2018 00:00:00

PHP 相关文章推荐
简体中文转换为繁体中文的PHP函数
Oct 09 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
php使用curl模拟登录后采集页面的例子
Nov 04 PHP
php发送post请求的三种方法
Feb 11 PHP
初识laravel5
Mar 02 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 #PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 #PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 #PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 #PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 #PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 #PHP
总结PHP代码规范、流程规范、git规范
Jun 18 #PHP
You might like
php 日期时间处理函数小结
2009/12/18 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
js中function()使用方法
2013/12/24 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
应届实习生的自我评价范文
2014/01/05 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
2014年医务科工作总结
2014/12/18 职场文书
导游词之临安白水涧
2019/11/05 职场文书