如何用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
相关产品推荐
相关产品推荐

