PHP中字符串转日期时间需掌握五种方法:一、strtotime函数解析为时间戳;二、DateTime类面向对象解析;三、date_create函数式封装;四、DateTimeImmutable不可变对象;五、IntlDateFormatter本地化适配。

如果您需要将字符串形式的日期时间转换为PHP可识别的日期时间格式,则必须掌握几个核心函数。以下是实现该目标的具体方法:
一、strtotime函数
strtotime函数用于将任何英文文本的日期时间描述解析为Unix时间戳(自1970年1月1日以来的秒数),是处理常见日期字符串最轻量、最直接的方式。
1、调用strtotime函数,传入标准格式或自然语言风格的日期字符串,例如"2023-10-05"或"next Monday"。
2、检查返回值是否为false,若为false说明解析失败,需验证输入字符串格式是否符合strtotime支持的语法。
立即学习“PHP免费学习笔记(深入)”;
3、将获得的时间戳传递给date函数进行格式化输出,例如date('Y-m-d H:i:s', $timestamp)。
二、DateTime类构造方法
DateTime类提供面向对象方式解析日期字符串,支持更严格的格式控制与国际化扩展,适用于需要高可靠性和后续链式操作的场景。
1、使用new DateTime($dateString)直接实例化,$dateString可为"2023/04/12"、"12-Apr-2023"等常见格式。
2、捕获Exception异常,当字符串无法被识别时,DateTime构造会抛出错误,需用try-catch包裹以避免脚本中断。
3、调用format方法输出指定格式的日期字符串,例如$obj->format('Y-m-d')。
三、date_create函数
date_create是DateTime类的函数式封装,行为与new DateTime完全一致,但语法更贴近传统函数调用习惯,适合偏好过程式编程风格的开发者。
1、调用date_create($dateString),返回DateTime对象或false(失败时)。
2、使用===严格比较判断返回值是否为false,避免将时间戳0误判为失败。
3、成功后调用date_format($object, $format)完成格式化,等价于$obj->format($format)。
四、DateTimeImmutable类
DateTimeImmutable与DateTime行为一致,但所有修改操作均返回新实例而非修改原对象,适用于需保留原始日期值、避免意外覆盖的场景。
1、使用new DateTimeImmutable($dateString)创建不可变日期对象。
2、所有方法如modify()、add()、sub()均不改变当前实例,而是返回新的DateTimeImmutable对象。
3、调用format()输出结果,原始对象状态始终不变。
五、IntlDateFormatter类(多语言环境适配)
IntlDateFormatter用于解析和格式化符合区域设置(locale)习惯的日期字符串,例如中文“2023年10月5日”或德文“5. Oktober 2023”,解决非ISO格式本地化输入问题。
1、通过IntlDateFormatter::create($locale, $dateType, $timeType)初始化格式化器,例如IntlDateFormatter::create('zh_CN', IntlDateFormatter::FULL, IntlDateFormatter::NONE)。
2、调用parse()方法解析本地化日期字符串,返回Unix时间戳。
3、使用getTimeZoneId()确认时区是否匹配预期,未显式指定时区时默认使用系统时区。











