欢迎访问宙启技术站
智能推送

使用PHP函数对日期和时间进行操作

发布时间:2023-06-15 01:50:39

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 格式的年份数字(使用周数),