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

PHPMailer如何将邮件日期输出格式改为dd/mm/yyyy

解决HTML日期输入框提交后邮件中日期格式转换问题

问题描述

我使用以下HTML日期输入框:

<p class="time">Reisezeitraum:
<input type="date" id="date1" name="date1">-<input type="date" id="date2" name="date2">
</p>

通过以下PHP代码获取日期并通过PHPMailer发送邮件:

$date1 = htmlspecialchars($_POST["date1"], ENT_QUOTES, "UTF-8");
$date2 = htmlspecialchars($_POST["date2"], ENT_QUOTES, "UTF-8");
....
$mail -> Body     = "
<b>Reisezeitraum:</b> {$_POST['date1']} - {$_POST['date2']}<br>
";

目前邮件中日期以yyyy/mm/dd格式输出,我希望改为dd/mm/yyyy格式。

我曾尝试替换为以下PHP代码,但未成功,邮件仍显示yyyy/mm/dd格式,且代码中的日期还额外显示在单独页面上:

$date1 = date_create('01-01-2000');
echo date_format($date1, 'd-m-Y H:i:s');
$date2 = date_create('01-01-2000');
echo date_format($date2, 'd-m-Y H:i:s');

解决方案

1. 错误原因分析

  • 之前的代码用了固定测试日期'01-01-2000',没有实际使用表单提交的$_POST['date1']和$_POST['date2']值,所以邮件里还是原格式。
  • 使用echo会直接把格式化后的日期输出到页面,这就是额外显示在页面上的原因。

2. 正确修改步骤

步骤1:处理POST提交的日期并格式化

HTML的date输入框提交的是ISO标准格式(YYYY-MM-DD),我们需要把这个字符串转换为DateTime对象,再格式化为dd/mm/yyyy:

// 获取并处理日期,注意不要用echo输出到页面
$date1 = isset($_POST["date1"]) ? DateTime::createFromFormat('Y-m-d', $_POST["date1"]) : null;
$date2 = isset($_POST["date2"]) ? DateTime::createFromFormat('Y-m-d', $_POST["date2"]) : null;

// 格式化日期为dd/mm/yyyy,处理未选择日期的情况
$formattedDate1 = $date1 ? $date1->format('d/m/Y') : '未选择';
$formattedDate2 = $date2 ? $date2->format('d/m/Y') : '未选择';

// 可选:转义HTML特殊字符,避免注入问题
$formattedDate1 = htmlspecialchars($formattedDate1, ENT_QUOTES, "UTF-8");
$formattedDate2 = htmlspecialchars($formattedDate2, ENT_QUOTES, "UTF-8");

步骤2:在邮件Body中使用格式化后的变量

不要直接使用$_POST的原始值,改用格式化好的变量:

$mail->Body = "
<b>Reisezeitraum:</b> {$formattedDate1} - {$formattedDate2}<br>
";

完整示例代码

// 先检查POST数据是否存在
if(isset($_POST["date1"], $_POST["date2"])){
    $date1 = DateTime::createFromFormat('Y-m-d', $_POST["date1"]);
    $date2 = DateTime::createFromFormat('Y-m-d', $_POST["date2"]);
    
    $formattedDate1 = $date1 ? $date1->format('d/m/Y') : '未选择';
    $formattedDate2 = $date2 ? $date2->format('d/m/Y') : '未选择';
    
    $formattedDate1 = htmlspecialchars($formattedDate1, ENT_QUOTES, "UTF-8");
    $formattedDate2 = htmlspecialchars($formattedDate2, ENT_QUOTES, "UTF-8");
} else {
    $formattedDate1 = $formattedDate2 = '未提交';
}

// PHPMailer邮件内容设置
$mail->Body = "
<b>Reisezeitraum:</b> {$formattedDate1} - {$formattedDate2}<br>
";

内容的提问来源于stack exchange,提问作者XirLion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:44:54