假设我们有一张名为 events 的表,其中有一个 event_date 字段是 DATETIME 类型。
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("连接失败: " . $mysqli->connect_error);
}
$sql = "SELECT event_date FROM events WHERE id = 1";
$result = $mysqli->query($sql);
if ($result) {
// 直接取出日期字段
$date = $result->fetch_column();
echo "原始日期格式: " . $date;
} else {
echo "查询失败: " . $mysqli->error;
}
$mysqli->close();
?>
输出可能是:
原始日期格式: 2025-05-23 14:30:00
如果你只想要年月日部分 "2025-05-23",或者想用其他格式输出,比如 "23 May 2025",就需要对结果进行处理。
<?php
$date = $result->fetch_column();
$dateObj = new DateTime($date);
// 格式化为只显示年月日
$formattedDate = $dateObj->format('Y-m-d');
echo "格式化后的日期: " . $formattedDate;
?>
这样输出:
格式化后的日期: 2025-05-23
或者:
$formattedDate = $dateObj->format('d M Y');
echo "格式化后的日期: " . $formattedDate;
输出:
格式化后的日期: 23 May 2025
如果想让数据库直接返回格式化后的字符串,可以使用 MySQL 的 DATE_FORMAT 函数:
<?php
$sql = "SELECT DATE_FORMAT(event_date, '%Y-%m-%d') AS event_date FROM events WHERE id = 1";
$result = $mysqli->query($sql);
if ($result) {
$date = $result->fetch_column();
echo "SQL 格式化后的日期: " . $date;
}
?>
输出:
SQL 格式化后的日期: 2025-05-23
虽然可以用 substr 直接截取日期字符串的前 10 个字符,但不够灵活,且容易出错。
$date = $result->fetch_column();
$shortDate = substr($date, 0, 10);
echo "截取的日期: " . $shortDate;
mysqli_result::fetch_column 返回的日期是字符串格式,需转换后才能自定义格式。
使用 PHP DateTime 是推荐的方法,既灵活又安全。
也可以在 SQL 查询中直接格式化,减少 PHP 端的处理。
避免用字符串截取日期,除非确定格式稳定。
合理选择处理方式,可以让你的日期显示更符合业务需求,同时保证代码的可维护性和健壮性。