PHP字符串转日期有五种典型方法:一、用strtotime()解析标准格式;二、用DateTime处理ISO 8601格式;三、预处理中文日期再转换;四、直接将MySQL时间字符串传入DateTime;五、手动分割重组非标准分隔符字符串。

如果您在PHP开发中需要将字符串转换为日期对象,但对date()、strtotime()和DateTime类的用法尚不熟悉,则可能是由于缺乏对常见格式转换场景的实操训练。以下是几种典型字符转日期的练习方法:
一、使用strtotime()解析标准时间字符串
strtotime()函数可将大多数常见英文或数字格式的时间字符串解析为Unix时间戳,是入门最直接的工具,适用于格式相对规范的输入。
1、定义一个标准格式字符串:$str = "2023-12-25 14:30:45";
2、调用strtotime()将其转为时间戳:$timestamp = strtotime($str);
立即学习“PHP免费学习笔记(深入)”;
3、用date()格式化输出验证结果:echo date("Y年m月d日 H:i:s", $timestamp);
4、尝试其他支持格式:如"next Monday"、"+2 days"、"12/25/2023",观察返回的时间戳是否符合预期。
二、用DateTime构造函数处理ISO 8601格式
DateTime类能更严谨地处理ISO 8601标准格式(如"2023-12-25T14:30:45+08:00"),避免strtotime()在模糊格式下的解析歧义。
1、实例化DateTime对象:$dt = new DateTime("2023-12-25T14:30:45+08:00");
2、调用format()方法输出指定格式:echo $dt->format("Y-m-d H:i:s");
3、尝试带时区的字符串:"2023-12-25T14:30:45Z",观察默认时区是否自动转换。
4、捕获异常以验证非法格式:将字符串改为"2023-13-45",确认是否抛出DateTime::__construct(): Failed to parse time string错误。
三、处理中文日期字符串(需自定义解析)
PHP原生函数无法直接识别“2023年12月25日”这类中文格式,需先替换关键词再交由strtotime()处理,属于基础文本预处理练习。
1、定义含中文的字符串:$str = "2023年12月25日 下午2点30分";
2、用str_replace()批量替换中文单位:$str = str_replace(["年","月","日","上午","下午","点","分"], ["-","-"," ",""," "," :",":"], $str);
3、对“下午”做小时修正:若含“下午”且小时数小于12,则加12;示例中“下午2点”应转为14:30。
4、拼接为"2023-12-25 14:30:00"后调用strtotime(),验证结果是否正确。
四、从MySQL时间戳字符串转PHP DateTime对象
数据库查询返回的"Y-m-d H:i:s"格式字符串(如"2023-12-25 14:30:45")可直接被DateTime识别,是Web开发中最高频的转换场景。
1、模拟数据库返回值:$mysql_time = "2023-12-25 14:30:45";
2、传入DateTime构造函数:$dt = new DateTime($mysql_time);
3、获取时间戳用于计算:$timestamp = $dt->getTimestamp();
4、调整时区并重新格式化:$dt->setTimezone(new DateTimeZone("Asia/Shanghai")); echo $dt->format("c");
五、分割并重组非标准分隔符字符串
面对"25/12/2023 14-30-45"这类使用斜杠与短横混用的格式,需手动拆分再按位置映射年月日时分秒,锻炼字符串操作基本功。
1、用explode()按空格分割:list($date_part, $time_part) = explode(" ", "25/12/2023 14-30-45");
2、对日期部分再按"/"分割:list($d, $m, $y) = explode("/", $date_part);
3、对时间部分按"-"分割:list($h, $i, $s) = explode("-", $time_part);
4、拼接为标准格式字符串:"{$y}-{$m}-{$d} {$h}:{$i}:{$s}",再传入DateTime构造函数。











