PHP日期格式转换求助:12/May/2018转2018-12-05得1969-12-31
解决PHP日期格式转换失败(输出1969-12-31)的问题
这个坑我之前踩过!你遇到的问题根源是strtotime()没法正确识别12/May/2018这种日/英文月缩写/年的格式,导致解析失败返回false,而date()函数接收到false时,会默认输出Unix纪元起始点(1970-01-01)的前一天日期(也就是1969-12-31,和时区设置有关)。
靠谱的解决办法:用DateTime::createFromFormat()
PHP的DateTime类提供了createFromFormat()方法,它可以按照指定的格式去解析日期字符串,完美适配这种自定义格式的日期转换需求。
直接上代码:
$originalDate = "12/May/2018"; // 按照原日期的格式规则解析:d=两位日,M=英文月缩写,Y=四位年 $dateInstance = DateTime::createFromFormat('d/M/Y', $originalDate); // 先判断解析是否成功,避免异常 if ($dateInstance) { $newDate = $dateInstance->format('Y-m-d'); echo $newDate; // 输出:2018-05-12 } else { echo "日期格式错误,无法解析"; }
为什么原来的方法不行?
strtotime()对日期格式的识别是有默认规则的:当它看到/作为分隔符时,会默认按照月/日/年的格式去解析。你的原日期是12/May/2018,它会把12当成月份,再结合后面的May(五月),格式冲突导致直接解析失败返回false,最终让date()输出了那个奇怪的1969日期。
内容的提问来源于stack exchange,提问作者Helena Hannah George
相关产品推荐
相关产品推荐

