1. 简介
在PHP中,有一个非常实用的函数 strptime(),它允许我们将时间字符串解析为日期和时间信息。这个函数的功能与C语言中的同名函数类似,可以帮助我们方便地操作时间信息。
2. strptime()函数的基本使用方法
strptime()函数的基本用法非常简单,只需要传入两个参数:要解析的时间字符串和时间字符串的格式。函数会将时间字符串解析为结构体,并返回解析后的日期和时间信息。
$time_str = '2019-10-01 15:30:00';
$time_format = '%Y-%m-%d %H:%M:%S';
$time_info = strptime($time_str, $time_format);
print_r($time_info);
上面的代码会输出类似下面这样的内容:
{
["tm_sec"]=> int(0)
["tm_min"]=> int(30)
["tm_hour"]=> int(15)
["tm_mday"]=> int(1)
["tm_mon"]=> int(9)
["tm_year"]=> int(119)
["tm_wday"]=> int(2)
["tm_yday"]=> int(273)
["tm_isdst"]=> int(-1)
}
在上面的输出结果中,我们可以看到一系列的tm_xxx字段,它们分别表示时间的各个部分,比如tm_hour表示小时数,tm_min表示分钟数,等等。
3. 时间字符串的格式化
3.1 基本格式化方式
strptime()函数第二个参数的意义非常重要,它指定了时间字符串的格式。具体来说,时间字符串中的各个部分需要用不同的格式符号进行表示,下面是一些常用的格式符号:
符号 | 含义 |
---|---|
%a | 星期几的缩写(如Mon) |
%A | 星期几的完整名称(如Monday) |
%b | 月份的缩写(如Jan) |
%B | 月份的完整名称(如January) |
%d | 日期(如01) |
%H | 小时(24小时制,如15) |
%I | 小时(12小时制,如03) |
%m | 月份(如10) |
%M | 分钟(如30) |
%p | 上午或下午(AM或PM) |
%S | 秒数(如01) |
%y | 年份的后两位(如19) |
%Y | 年份的完整表示(如2019) |
%Z | 时区缩写(如UTC) |
这些格式符号可以组合使用,从而表示不同的时间格式。下面是一个示例:
$time_str = '2019-10-01 15:30:00';
$time_format = '%Y-%m-%d %H:%M:%S';
$time_info = strptime($time_str, $time_format);
echo "{$time_info['tm_mon']}-{$time_info['tm_mday']}-{$time_info['tm_year']+1900} {$time_info['tm_hour']}:{$time_info['tm_min']}:{$time_info['tm_sec']}";
输出结果为:
10-1-2019 15:30:0
3.2 其他格式化方式
除了上面介绍的基本格式化方式外,strptime()函数还支持一些其他的格式化方式。下面列举一些比较常用的方法。
3.2.1 相对日期和时间字符串
时间字符串中除了用具体的数字表示时间之外,还可以用相对的时间表示方式。比如我们可以用 "now" 表示当前时间:
$time_str = 'now';
$time_format = '%Y-%m-%d %H:%M:%S';
$time_info = strptime($time_str, $time_format);
echo "{$time_info['tm_mon']}-{$time_info['tm_mday']}-{$time_info['tm_year']+1900} {$time_info['tm_hour']}:{$time_info['tm_min']}:{$time_info['tm_sec']}";
输出结果为:
11-18-2021 0:0:0
我们还可以用 "tomorrow"(明天)、 "yesterday"(昨天)等相对时间表达式:
$time_str = 'tomorrow';
$time_format = '%Y-%m-%d %H:%M:%S';
$time_info = strptime($time_str, $time_format);
echo "{$time_info['tm_mon']}-{$time_info['tm_mday']}-{$time_info['tm_year']+1900} {$time_info['tm_hour']}:{$time_info['tm_min']}:{$time_info['tm_sec']}";
输出结果为:
11-19-2021 0:0:0
3.2.2 时间戳字符串
时间戳是指从1970年1月1日0时0分0秒以来的秒数。我们可以用PHP中的时间戳函数 time() ,将当前时间表示为时间戳:
$time_str = time();
$time_format = '%Y-%m-%d %H:%M:%S';
$time_info = strptime($time_str, $time_format);
echo "{$time_info['tm_mon']}-{$time_info['tm_mday']}-{$time_info['tm_year']+1900} {$time_info['tm_hour']}:{$time_info['tm_min']}:{$time_info['tm_sec']}";
输出结果为:
11-18-2021 13:34:51
我们也可以将一个时间戳转换成时间字符串:
$time_stamp = 1571322036;
$time_format = '%Y-%m-%d %H:%M:%S';
$time_info = strptime($time_stamp, $time_format);
echo "{$time_info['tm_mon']}-{$time_info['tm_mday']}-{$time_info['tm_year']+1900} {$time_info['tm_hour']}:{$time_info['tm_min']}:{$time_info['tm_sec']}";
输出结果为:
10-17-2019 09:27:16
4. 汉字日期和时间字符串的格式化
在实际应用中,我们经常会遇到一些汉字日期和时间字符串,例如"2021年11月18日"、"下午2点30分"等。对于这类字符串,我们需要使用一些特殊的格式化方式才能将其转换为时间信息。
4.1 汉字日期字符串的格式化
对于汉字日期字符串,我们可以使用PHP中的 strtotime() 函数将其转换成时间戳,然后再使用strptime()函数解析。下面是一个例子:
$time_str = '2021年11月18日';
$time_format = '%Y-%m-%d';
$time_stamp = strtotime($time_str);
$time_info = strptime($time_stamp, $time_format);
echo "{$time_info['tm_mon']}-{$time_info['tm_mday']}-{$time_info['tm_year']+1900}";
输出结果为:
11-18-2021
4.2 汉字时间字符串的格式化
对于汉字时间字符串,我们需要先将其转换成24小时制的时间字符串,然后再使用strptime()函数解析。下面是一个例子:
$time_str = '下午2点30分';
$time_format = '%H:%M:%S';
//将时间字符串转换成24小时制
$time_str = date('H:i:s', strtotime(str_replace('下午','pm',str_replace('上午','am', $time_str))));
$time_info = strptime($time_str, $time_format);
echo "{$time_info['tm_hour']}:{$time_info['tm_min']}:{$time_info['tm_sec']}";
输出结果为:
14:30:00
5. 总结
这篇文章介绍了strptime()函数的基本用法以及一些常见的时间字符串格式化方法。在实际开发中,我们常常需要处理各种时间字符串,使用strptime()函数可以帮助我们快速解析这些字符串。