PHP 的 date 日期时间常用函数解析 -- PHP 学习

2019-04-27  本文已影响0人  无故下架内容so账号已弃用

date

格式化一个本地时间/日期**

语法格式:

date ( string \$format [, int \$timestamp ] ) : string

格式字串可以识别以下 format 参数的字符串

format字符 说明 返回值例子
--- ---
d 月份中的第几天,有前导零的 2 位数字 0131
D 星期中的第几天,文本表示,3 个字母 MonSun
j 月份中的第几天,没有前导零 131
l(“L”的小写字母) 星期几,完整的文本格式 SundaySaturday
N ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天)
S 每月天数后面的英文后缀,2 个字符 stndrd 或者 th。可以和 j 一起用
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
z 年份中的第几天 0365
星期 --- ---
W ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) 例如:42(当年的第 42 周)
--- ---
F 月份,完整的文本格式,例如 January 或者 March JanuaryDecember
m 数字表示的月份,有前导零 0112
M 三个字母缩写表示的月份 JanDec
n 数字表示的月份,没有前导零 112
t 指定的月份有几天 2831
--- ---
L 是否为闰年 如果是闰年为 1,否则为 0
o ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003
Y 4 位数字完整表示的年份 例如:19992003
y 2 位数字表示的年份 例如:9903
时间 --- ---
a 小写的上午和下午值 ampm
A 大写的上午和下午值 AMPM
B Swatch Internet 标准时 000999
g 小时,12 小时格式,没有前导零 112
G 小时,24 小时格式,没有前导零 023
h 小时,12 小时格式,有前导零 0112
H 小时,24 小时格式,有前导零 0023
i 有前导零的分钟数 0059>
s 秒数,有前导零 0059>
u 毫秒 (PHP 5.2.2 新加)。需要注意的是 date() 函数总是返回000000 因为它只接受 integer 参数, 而 DateTime::format() 才支持毫秒。 示例: 654321
时区 --- ---
e 时区标识(PHP 5.1.0 新加) 例如:UTCGMTAtlantic/Azores
I 是否为夏令时 如果是夏令时为 1,否则为 0
O 与格林威治时间相差的小时数 例如:+0200
P 与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加) 例如:+02:00
T 本机所在的时区 例如:ESTMDT(【译者注】在 Windows 下为完整文本格式,例如“Eastern Standard Time”,中文版会显示“中国标准时间”)。
Z 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 -4320043200
完整的日期/时间 --- ---
c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00
r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200
U 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 参见 time()

格式字串中不能被识别的字符将原样显示。Z 格式在使用 gmdate() 时总是返回 0

以上内容摘自 php 学习手册

date 函数的引用及常用参数解析

<?php
    echo date('Y年m月d日').'<br />'; // => 2019年04月26日

    echo date('y/n/j').'<br />'; // => 19/4/26

    echo date('Y-m-d H:i:s').'<br />'; // => 2019-04-26 13:13:59

    echo date('今天是 l, 简写D').'<br />'; // => 今天是 Friday, 简写Fri

    echo date('今天是这周的第 N 天').'<br />'; // => 今天是这周的第 5 天

    echo date('jS').'<br />'; // => 26th

    echo date('今天是星期w').'<br />'; // => 今天是星期5

    echo date('今天是今年的第z天').'<br />'; // => 今天是今年的第115天

    echo date('今天是今年的第z天').'<br />'; // => 今天是今年的第115天

    echo date('今年的第W周').'<br />'; // => 今年的第17周

    echo date('现在是F, 简写M').'<br />'; // => 现在是April, 简写Apr

    echo date('这个月有t天').'<br />'; // => 这个月有30天

    echo date('L') == 1 ? '今年是闰年' : '今年不是闰年'.'<br />'; // => 今年不是闰年

    echo date('o').'<br />'; // => 2019

    echo date('g:i:s a').'<br />'; // => 1:05:26 pm

    echo date('G:i:s A').'<br />'; // => 13:05:26 PM

    echo date('h:i:s a').'<br />'; // => 01:05:26 pm

    echo date('H:i:s A').'<br />'; // => 13:05:26 PM

    echo date('当前设置的时区: e').'<br />'; // => 当前设置的时区: PRC

    echo date('本机所在的时区: T').'<br />'; // => 本机所在的时区: CST 备注: CST可视为美国、澳大利亚、古巴或中国的标准时间

    echo 'ISO 8601 格式的日期(PHP 5 新加): '.date('c').'<br />'; // => ISO 8601 格式的日期(PHP 5 新加): 2019-04-26T13:11:57+08:00

    echo 'RFC 822 格式的日期: '.date('r').'<br />'; // => RFC 822 格式的日期: Fri, 26 Apr 2019 13:11:57 +0800

    echo '从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数: '.date('U').'<br />'; // => 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数: 1556255517

时间戳的使用

<?php
    echo time().'<br />'; // => 1556328368

    echo date('现在的时间是 Y:m:d H:i:s').'<br />'; // => 现在的时间是 2019:04:27 09:26:08

    echo date('现在的时间是 Y:m:d H:i:s', time()).'<br />'; // => 现在的时间是 2019:04:27 09:26:08

    echo date('一周后的时间是 Y:m:d H:i:s', time()+7*24*60*60 ).'<br />'; // => 一周后的时间是 2019:05:04 09:26:08

    echo date('三十天前的时间是 Y:m:d H:i:s', time()-30*24*60*60 ).'<br />'; // => 三十天前的时间是 2019:03:28 09:26:08

mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] ) : int

参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值

参数解析:
mktime(hour,minute,second,month,day,year)
mktime(小时,分钟,秒数,月,日,年)

<?php
    $birthday = mktime(8, 0, 0, 2, 15, 1995);

    echo $birthday.'<br/>'; // => 792806400

    echo date('Y:m:d H:i:s', $birthday).'<br/>'; // => 1995:02:15 08:00:00

    $timestamp = time()-$birthday;
    echo '我今年 '.floor($timestamp/(24*60*60*365)) .' 岁'; // => 我今年 24 岁

floor(float $value): 返回不大于 value 的最接近的整数,舍去小数部分取整

strtotime 函数的使用

strtotime — 将任何字符串的日期时间描述解析为 Unix 时间戳

<?php
    echo strtotime('now').'<br />'; // => 1556340288

    echo '现在是 '.date('Y-m-d H:i:s', strtotime('now')).'<br />'; // => 现在是 2019-04-27 12:46:10

    echo '明天是 '.date('Y-m-d H:i:s', strtotime('+1 day')).'<br />'; // => 明天是 2019-04-28 12:46:10

    echo '五天前 '.date('Y-m-d H:i:s', strtotime('-5 days')).'<br />'; // => 五天前 2019-04-22 12:48:19

    echo '5年6个月16天后 '.date('Y-m-d H:i:s', strtotime('+5 years 6 months 16 days')).'<br />'; // => 5年6个月16天后 2024-11-12 12:52:07

微秒

_ 通过微秒计算 php 程序执行的时间

<?php
    header('content-type: text/html;charset=utf-8');

    echo microtime().'<br />'; // => 0.62073800 1556341513

    echo microtime(true).'<br />'; // => 1556341513.6207

    $start = microtime(true);
    for ($i=0; $i<=1000000; $i++){
        $arr[] = $i;
    }
    $end = microtime(true);

    $time = $end - $start;
    echo 'for 循环的执行时间 '.$time; // => for 循环的执行时间 0.11352300643921

其他日期时间函数的使用

返回一个根据 timestamp 得出的包含有日期信息的关联数组 array。如果没有给出时间戳则认为是当前本地时间。

<?php
    header('content-type: text/html;charset=utf-8');

    var_dump(getdate()); // => array(11) { ["seconds"]=> int(23) ["minutes"]=> int(9) ["hours"]=> int(13) ["mday"]=> int(27) ["wday"]=> int(6) ["mon"]=> int(4) ["year"]=> int(2019) ["yday"]=> int(116) ["weekday"]=> string(8) "Saturday" ["month"]=> string(5) "April" [0]=> int(1556341763) }

返回的关联数组中的键名单元

键名 说明 返回值例子
"seconds" 秒的数字表示 059
"minutes" 分钟的数字表示 059
"hours" 小时的数字表示 023
"mday" 月份中第几天的数字表示 131
"wday" 星期中第几天的数字表示 0 (周日) 到 6 (周六)
"mon" 月份的数字表示 112
"year" 4 位数字表示的完整年份 比如: 19992003
"yday" 一年中第几天的数字表示 0365
"weekday" 星期几的完整文本表示 SundaySaturday
"month" 月份的完整文本表示,比如 January 或 March JanuaryDecember
0 自从 Unix 纪元开始至今的秒数,和 time() 的返回值以及用于 date() 的值类似。 系统相关,典型值为从 -21474836482147483647
<?php
    header('content-type: text/html;charset=utf-8');

    var_dump(checkdate(12,23, 2019)); // => bool(true)

    var_dump(checkdate(45,23, 2019)); // => bool(false)

    var_dump(checkdate(12,33, 2019)); // => bool(false)

    var_dump(checkdate(2,29, 2016)); // => bool(true)

    var_dump(checkdate(2,29, 2019)); // => bool(false)

参考资料:
https://www.imooc.com/learn/827
https://www.php.net/manual/zh/langref.php

上一篇 下一篇

猜你喜欢

热点阅读