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

数据库中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:20