数据库中m/d/y转d/m/y方法及PHP日期格式化显示异常问题
嘿,我来帮你搞定这两个日期处理的问题!
问题1:如何在数据库中将m/d/y格式的日期转换为d/m/y格式?
你可以从两个层面来处理这个转换,选哪种取决于你的需求:
数据库查询时直接转换(以MySQL为例):
先用STR_TO_DATE把字符串解析成数据库能识别的日期类型,再用DATE_FORMAT输出成目标格式:SELECT DATE_FORMAT(STR_TO_DATE(your_date_column, '%m/%d/%Y'), '%d/%m/%Y') AS converted_date FROM your_table;这里
%m/%d/%Y对应原格式的「月/日/年」,%d/%m/%Y是你要的「日/月/年」格式。取出数据后用PHP处理:
别依赖自动解析,用DateTime::createFromFormat精准指定原格式,避免歧义:$dbDate = '08/07/1990'; // 从数据库拿到的m/d/y格式字符串 $dateObj = DateTime::createFromFormat('m/d/Y', $dbDate); echo $dateObj->format('d/m/Y'); // 输出 07/08/1990
问题2:日期格式化后显示不符的问题
这个坑很多人都踩过!strtotime()对斜杠/分隔的日期,默认会按月/日/年来解析,所以你的08/07/1990被它当成了1990年8月7日,自然输出07 Aug 1990。但你实际是把它当作日/月/年来存的,所以必须强制指定解析格式:
$date = '08/07/1990'; // 明确告诉PHP:这个字符串是日/月/年格式 $dateObj = DateTime::createFromFormat('d/m/Y', $date); echo $dateObj->format('d-F-Y'); // 输出 08 July 1990
要是担心原日期可能有格式不规范的情况,还可以加个校验:
$date = '08/07/1990'; $dateObj = DateTime::createFromFormat('d/m/Y', $date); if ($dateObj && $dateObj->format('d/m/Y') === $date) { echo $dateObj->format('d-F-Y'); } else { echo '无效的日期格式,请检查输入'; }
这样就能精准得到你想要的显示效果啦!
内容的提问来源于stack exchange,提问作者php developer
相关产品推荐
相关产品推荐

