使用PHP函数对日期和时间进行操作
PHP作为一种服务器端编程语言,自然有丰富的日期和时间相关函数来处理日期和时间。本篇文章将会介绍PHP常用的日期和时间函数,以及它们的基本用法和注意事项。
一、时间戳与日期格式化
在PHP中,时间戳是指从1970年1月1日0时0分0秒(UTC/GMT的午夜)起到当前时间的秒数。时间戳在处理和计算时间方面非常方便。可以使用time()函数获取当前时间的时间戳,也可以使用mktime()函数获取指定时间的时间戳。
1. time()函数
time()函数返回当前的时间戳,以整数形式表示。例如:
echo time();
输出:
1591051635
上面的输出结果表示当前时间距离1970年1月1日0时0分0秒(UTC/GMT的午夜)已经过去了1591051635秒。
2. mktime()函数
mktime()函数可以返回指定日期和时间的时间戳。其语法如下:
mktime(hour,minute,second,month,day,year,is_dst);
其中,hour表示小时,minute表示分钟,second表示秒钟,month表示月份,day表示日期,year表示年份。is_dst表示是否考虑夏令时(Daylight Saving Time)。如果is_dst参数为1,那么mktime()函数会将时间戳调整到夏令时的时间。
例如,如果我们想获取2020年5月1日0时0分0秒的时间戳,可以这样写:
echo mktime(0, 0, 0, 5, 1, 2020);
输出:
1588297200
上面的输出结果就是2020年5月1日0时0分0秒的时间戳。
另外,PHP还提供了date()函数和strftime()函数,用于格式化时间戳为指定的日期和时间字符串。这两个函数的参数格式稍有不同,具体如下:
1. date()函数
date(format,timestamp);
其中,format参数是必须的,表示指定的日期和时间格式;timestamp参数是可选的,表示指定的时间戳,如果不指定则默认为当前时间的时间戳。
format参数主要包括如下格式控制字符:
| 格式控制字符 | 描述 | 示例 |
| ------------ | -------------------------------------------------- | --------------- |
| d | 月份中的第几天,两位数字(01-31) | 01 |
| D | 星期中的第几天,文本表示(三个字母) | Mon |
| j | 月份中的第几天,不带前导零(1-31) | 1 |
| l (小写 'L') | 星期几,完整的文本格式 | Monday |
| N | ISO-8601 格式下表示星期中的第几天(1-7) | 1 |
| S | 月份中的英语序数词后缀,2 个字符(英语缩写) | st |
| w | 星期中的第几天(0-6) | 1 |
| z | 年份中的第几天(0-365) | 120 |
| W | ISO-8601 格式年份中的第几周,每周从星期一开始 | 12 |
| F | 月份,完整的文本格式(例如 January 或 March) | January |
| m | 数字表示的月份,有前导零(01-12) | 05 |
| M | 三个字母缩写表示的月份 | May |
| n | 数字表示的月份,不带前导零(1-12) | 5 |
| t | 给定月份所应有的天数 | 31 |
| L | 是否为闰年 | 0 或 1 |
| o | ISO-8601 格式年份数字。这与 Y 的值不同,不同在于 ISO-8601 格式中的年份总是和周有关联 | 2020 |
| Y | 年份,4 位数字 | 2020 |
| y | 年份,2 位数字 | 20 |
| a | 上午或下午,小写字母(am 或 pm) | pm |
| A | 上午或下午,大写字母(AM 或 PM) | PM |
| g | 12 小时格式小时数,不带前导零(1-12) | 9 |
| G | 24 小时格式小时数,没有前导零(0-23) | 21 |
| h | 12 小时格式小时数,有前导零(01-12) | 09 |
| H | 24 小时格式小时数,有前导零(00-23) | 21 |
| i | 分钟数,有前导零(00-59) | 32 |
| s | 秒数,有前导零(00-59) | 45 |
| T | 时区缩写(例如 EST,MDT) | CST |
| Z | 时区偏移量的秒数(例如 -43200 到 43200) | -25200 |
| U | Unix 时间戳(从 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)开始的秒数) | 1588297200 |
例如,要将时间戳1588297200格式化成2020年5月1日的中文日期格式,可以这样写:
echo date("Y年m月d日", 1588297200);
输出:
2020年05月01日
2. strftime()函数
strftime()函数和date()函数类似,也是用于格式化时间戳为指定的日期和时间字符串。不同的是,strftime()函数的格式控制字符是与本地设置相关联的。例如,在不同的语言环境下,"%b"所代表的月份名称可能不同。
其语法如下:
strftime(format,timestamp);
其中,format参数是必须的,表示指定的日期和时间格式;timestamp参数是可选的,表示指定的时间戳,如果不指定则默认为当前时间的时间戳。
format参数主要包括如下格式控制字符:
| 格式控制字符 | 描述 | 示例 |
| ------------ | ------------------------------------------------------------ | ------------------------------------- |
| %a | 缩写形式的星期几名称(Sun 到 Sat) | Sat |
| %A | 完整的星期几名称(Sunday 到 Saturday) | Saturday |
| %b | 缩写形式的月份名称(Jan 到 Dec) | Sep |
| %B | 完整的月份名称(January 到 December) | September |
| %c | 标准的日期时间串 | Sat Sep 23 14:55:02 2006 |
| %C | 世纪 | 21 |
| %d | 月内的一天,两位数字(01 到 31) | 23 |
| %D | 等效于 %m/%d/%y | 09/23/06 |
| %e | 月份中的第几天,不带前导零(1 到 31) | 23 |
| %F | 完整日期格式,等效于 %Y-%m-%d | 2006-09-23 |
| %g | ISO 格式的年份数字(使用周数) | 06 |
| %G | ISO 格式的年份数字(使用周数),
