PHP处理时间字符串的核心是“解析+格式化”,用strtotime()将任意有效时间字符串转为时间戳,再用date()按需格式化输出,如date('Y-m', strtotime('2024-03-15 10:20:30'))得"2024-03"。

PHP 截取时间字符串,核心不是“截取”而是“解析 + 格式化”。date() 和 strtotime() 配合使用,是处理时间字符串最常用、最可靠的方式:前者负责格式化输出,后者负责将各种时间字符串转为时间戳。
用 strtotime() 解析任意格式的时间字符串
只要字符串含有效日期信息(如中文、英文、带分隔符或无分隔符),strtotime() 都能尝试转换成时间戳(整数,单位秒)。
-
常见可解析格式:
"2024-03-15"、"2024/03/15 14:30:22"、"15 March 2024"、"next Monday"、"+2 days"、"昨天"(PHP 5.4+ 支持部分中文) -
失败时返回 false:建议加判断,避免后续 date() 报错:
$ts = strtotime($str); if ($ts === false) { /* 处理错误 */ }
用 date() 按需格式化输出
拿到时间戳后,date() 可按指定格式生成字符串,实现你想要的“截取”效果——比如只取年月、只取时分、或转为固定长度数字串。
-
只取年份:
date('Y', $ts)→"2024" -
只取年月日(短横线):
date('Y-m-d', $ts)→"2024-03-15" -
只取时分秒:
date('H:i:s', $ts)→"14:30:22" -
组合截取(如年月+星期):
date('Y-m l', $ts)→"2024-03 Friday"
一步到位:直接格式化原始字符串
无需中间变量,常写成一行:echo date('Y-m', strtotime('2024-03-15 10:20:30')); // 输出 "2024-03"
- 适合简单场景,但注意:若原始字符串格式异常,strtotime() 返回 false,date() 会默认使用当前时间,结果易出错
- 生产环境建议拆开写,显式校验时间戳有效性
注意边界:时区与精度
默认使用 PHP 配置的时区(date_default_timezone_get()),若原始字符串含时区(如 "2024-03-15T10:20:30+08:00"),strtotime() 会自动换算为本地时间戳;若需 UTC 时间,可用 gmdate() 替代 date()。
- 毫秒级字符串(如
"2024-03-15 10:20:30.123")会被 strtotime() 忽略毫秒部分,仅保留秒级精度 - 需要毫秒,得用
DateTime类配合format()和getTimestamp()+format('u')
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











