如何在PHP中从月-年字符串(08-2022)获取月份名称?
解决「08-2022」转「Aug-2022」的PHP日期格式问题
先明确你之前代码的问题:
- 第一个写法中,
08-2022未加引号,PHP会将其视为数值运算(08是无效八进制,实际解析为8,8-2022=-2014),且date的格式参数用了m-Y(这是原格式,不是你需要的月份缩写格式,正确应为M-Y);另外strtotime直接处理"08-2022"可能会误判为「日-年」,导致解析错误。 - 第二个写法完全错误:
date()是函数而非对象,不能链式调用format方法,参数逻辑也完全颠倒。
以下是两种正确的处理方式:
方法一:使用DateTime类(推荐)
DateTime类可精准指定输入格式,避免解析歧义:
$dateStr = '08-2022'; $date = DateTime::createFromFormat('m-Y', $dateStr); echo $date->format('M-Y'); // 输出 Aug-2022
createFromFormat明确告知PHP输入为「月-年」格式,再通过format('M-Y')输出月份缩写加年份的目标格式。
方法二:strtotime配合date(需调整输入格式)
若要使用strtotime,需先将输入转为它能正确识别的格式,比如拼接成「年-月-日」:
$dateStr = '08-2022'; list($month, $year) = explode('-', $dateStr); echo date('M-Y', strtotime("$year-$month-01")); // 输出 Aug-2022
先拆分月份和年份,拼成标准日期格式让strtotime正确解析,再输出目标格式。
内容的提问来源于stack exchange,提问作者Rajib Bin Alam
相关产品推荐
相关产品推荐

