You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中strtotime()处理"Y, F j"格式日期时忽略年份的问题

PHP strtotime()解析"Y, F j"格式日期异常的原因与解决办法

原因说明

strtotime()的日期解析逻辑依赖系统底层的日期处理库,它只对标准日期格式有良好的支持。"Y, F j"(比如2021, October 8)这种格式不属于它能正确识别的标准格式——它会把逗号前的年份当成一个独立的数值,无法和后面的月日关联起来,最终只解析出月日部分,自动用当前年份补全,所以不管你传哪一年,都会返回当前年份对应日期的时间戳。

替代解决方案

方案1:用DateTime::createFromFormat()指定格式解析

这是最可靠的方法,直接告诉PHP要解析的日期格式,完全匹配不会出错:

// 解析指定格式的日期字符串
$date = DateTime::createFromFormat('Y, F j', '2021, October 8');
// 获取时间戳
$timestamp = $date->getTimestamp();

方案2:调整日期字符串为标准格式

把字符串改成strtotime能识别的"F j, Y"格式(比如October 8, 2021),就能正常解析:

$timestamp = strtotime('October 8, 2021');

方案3:手动拆分后用mktime()生成时间戳

如果没法调整原字符串格式,可以手动拆分出年、月、日,再用mktime()生成时间戳:

$dateStr = '2021, October 8';
// 拆分字符串,提取各部分
list($year, $monthDay) = explode(', ', $dateStr);
list($monthName, $day) = explode(' ', $monthDay);
// 把月份名称转成数字
$month = date('n', strtotime($monthName));
// 生成时间戳
$timestamp = mktime(0, 0, 0, $month, $day, $year);

内容的提问来源于stack exchange,提问作者T.Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:45:34