如何在 PHP 中将数据库日期格式化为“03 March 2022”样式

1次阅读

如何在 PHP 中将数据库日期格式化为“03 March 2022”样式

本文介绍在 php + mysql 开发中,如何将数据库存储的标准日期(如 2022-03-03)安全、高效地格式化为易读的英文长格式(如 03 March 2022),重点使用 PHP 原生 dateTime 类完成转换,避免 SQL 层格式化带来的可维护性与国际化隐患。

本文介绍在 php + mysql 开发中,如何将数据库存储的标准日期(如 `2022-03-03`)安全、高效地格式化为易读的英文长格式(如 `03 march 2022`),重点使用 php 原生 datetime 类完成转换,避免 sql 层格式化带来的可维护性与国际化隐患。

在构建 CMS 等内容管理系统时,常需将数据库中以 DATE 或 DATETIME 类型存储的日期(如 ‘2022-03-03’)渲染为用户友好的格式(例如 ’03 March 2022’)。虽然 SQL 提供了 DATE_FORMAT() 等函数,但推荐在 PHP 层完成格式化——这不仅提升逻辑分离度、便于本地化扩展,还能规避因 SQL 函数差异导致的跨数据库兼容问题。

最可靠的方式是使用 PHP 的 DateTime 类(或其封装函数 date_format())。它能安全解析 ISO 格式日期字符串,并支持丰富的格式标识符。关键格式符说明如下:

  • d:带前导零的日期(01–31)
  • F:完整的月份英文名称(January, February, …)
  • Y:四位数年份(如 2022)

以下是直接替换你原有模板代码的推荐写法:

<td>   <?php      $from = date_format(date_create($record['fromDate']), 'd F Y');      $to   = date_format(date_create($record['toDate']), 'd F Y');      echo "$from - $to | {$record['location']}";   ?> </td>

优势说明

立即学习PHP免费学习笔记(深入)”;

  • date_create() 会自动校验输入是否为有效日期,若 $record[‘fromDate’] 为空或非法(如 NULL、0000-00-00),将返回 false,避免静默错误;
  • 可轻松扩展为多语言支持(例如结合 setlocale() 与 strftime(),或使用 IntlDateFormatter 实现完整国际化);
  • 保持 SQL 查询纯净,利于缓存、复用与单元测试。

⚠️ 注意事项

  • 务必确保数据库字段值为合法 ISO 日期字符串(YYYY-MM-DD),避免传入时间戳或非标准格式;
  • 若数据可能为 NULL,建议增加空值判断,防止警告:
    $from = $record['fromDate'] ? date_format(date_create($record['fromDate']), 'd F Y') : '—';
  • 不推荐在 SQL 查询中使用 DATE_FORMAT(fromDate, ‘%d %M %Y’) —— 这会使结果失去类型语义,且难以统一处理时区与本地化。

总结:日期展示层的格式化应由应用层(PHP)承担。利用 DateTime 系列 API,既简洁又健壮,是 CMS、后台系统等场景的最佳实践。

text=ZqhQzanResources