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

如何用PHP $_POST将表单提交日期转为mm-dd-yyyy格式

这个问题太典型了!HTML 的 <input type="date"> 控件有个“小特性”——不管你前端看到的显示格式是 dd-mm-yyyy,它提交给后端的默认格式永远是 yyyy-mm-dd(这是 HTML5 标准规定的)。要让邮件里显示成 mm-dd-yyyy,有两种靠谱的解决思路,你可以按需选择:

方法1:前端JavaScript处理(提交前转换格式)

适合不想改动后端代码的情况。你可以在表单提交的验证函数 checkform() 里,把日期转换成目标格式,再通过隐藏输入框提交:

修改你的 checkform 函数:

function checkform() {
  const dateInput = document.getElementById('date');
  
  if (dateInput.value) {
    // 拆分原始的yyyy-mm-dd格式
    const [year, month, day] = dateInput.value.split('-');
    // 拼接成mm-dd-yyyy
    const formattedDate = `${month}-${day}-${year}`;
    
    // 创建隐藏输入框来传递转换后的日期
    let hiddenInput = document.getElementById('formatted_date');
    if (!hiddenInput) {
      hiddenInput = document.createElement('input');
      hiddenInput.type = 'hidden';
      hiddenInput.name = 'formatted_date';
      hiddenInput.id = 'formatted_date';
      dateInput.parentElement.appendChild(hiddenInput);
    }
    hiddenInput.value = formattedDate;
    
    // 移除原日期输入框的name,避免提交原始格式
    dateInput.removeAttribute('name');
  }

  // 保留你原来的表单验证逻辑(比如非空检查等)
  // ... 你的其他验证代码
  
  return true;
}

之后在 submit.php 里,用 $_POST['formatted_date'] 就能拿到 mm-dd-yyyy 格式的日期了。

方法2:后端PHP处理(接收后转换格式)

这种方法更稳妥,因为前端可能存在JS被禁用的情况,后端处理兼容性更强。直接在 submit.php 里转换日期格式:

// 接收前端提交的原始日期(yyyy-mm-dd)
if (isset($_POST['date'])) {
  $originalDate = $_POST['date'];
  // 转换为DateTime对象,再格式化为mm-dd-yyyy
  $date = DateTime::createFromFormat('Y-m-d', $originalDate);
  $formattedDate = $date->format('m-d-Y');
  
  // 之后把$formattedDate插入到邮件内容里即可
}

小提示

如果你的用户地区设置是默认的,前端显示的dd-mm-yyyy其实是浏览器根据系统语言自动适配的,但提交格式不受影响——始终是yyyy-mm-dd。所以后端处理是我更推荐的方案,不用操心前端的各种情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:00:34