
本文介绍如何从类似“Saturday, 3 September 2022”这样的自然语言日期字符串中,准确提取并标准化输出日份(如 03),推荐使用 strtotime() + date() 或面向对象的 DateTime 类,避免手动字符串匹配带来的不可靠性。
本文介绍如何从类似“saturday, 3 september 2022”这样的自然语言日期字符串中,准确提取并标准化输出日份(如 `03`),推荐使用 `strtotime()` + `date()` 或面向对象的 `datetime` 类,避免手动字符串匹配带来的不可靠性。
在 PHP 中,直接用 == '3' 判断日期字符串中的日份(如 $date == '3')是无效的——因为 $date 是完整字符串("Saturday, 3 September 2022"),并非纯数字,且日期格式存在空格、逗号、英文月份等干扰因素。正确做法是借助 PHP 内置的时间解析能力,将自然语言日期转换为标准时间表示,再格式化提取日份。
✅ 推荐方案一:使用 strtotime() + date()(简洁高效)
$date = "Saturday, 3 September 2022";
$day = date('d', strtotime($date)); // 输出 '03'(带前导零)
echo $day; // → 03strtotime() 能智能解析多种英文/本地化日期格式,返回时间戳;date('d') 则确保以两位数字(01–31)输出日份,自动补零。
✅ 推荐方案二:使用 DateTime 类(面向对象、更健壮)
立即学习“PHP免费学习笔记(深入)”;
$date = "Saturday, 3 September 2022";
$dt = new DateTime($date);
echo $dt->format('d'); // → 03该方式支持异常捕获,适合生产环境:
try {
$dt = new DateTime($date);
echo $dt->format('d');
} catch (Exception $e) {
echo "Invalid date format: " . $e->getMessage();
}⚠️ 注意事项:
- 避免使用 substr()、explode() 等字符串截取方式,因日期格式易变(如 "1st"、"Sept"、"Sep"、不同语言或空格数量差异);
- strtotime() 在遇到无法解析的字符串时返回 false,建议配合 === false 检查;
- 若输入日期含时区信息(如 "3 September 2022 UTC"),DateTime 会自动处理,而 strtotime() 默认使用服务器时区;
- 如需不带前导零的日份(如 3 而非 03),改用格式符 'j':date('j', ...) 或 $dt->format('j')。
总结:始终优先利用 PHP 的日期解析引擎而非正则或字符串操作——它更可靠、可维护,并天然兼容国际化日期格式。



















