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

如何将表单提交的input date数据格式化为「日 月份全称 年份」格式

嘿,这个需求太常见啦!我给你两种实用的解决方案,你可以根据自己的技术栈和场景来选:

方案一:前端JavaScript拦截提交并转换格式

这种方法适合你希望在提交前就把日期转成目标格式的场景,核心思路是阻止表单默认提交行为,手动处理日期格式后再发送请求。

首先给你的表单和输入框加个ID方便操作,然后写监听逻辑:

<form id="dateForm" action="#">
  <input type="date" name="code" id="dateInput">
  <input type="submit">
</form>

<script>
document.getElementById('dateForm').addEventListener('submit', function(e) {
  // 先阻止表单默认提交
  e.preventDefault();
  
  const dateInput = document.getElementById('dateInput');
  const rawDate = dateInput.value;
  
  // 如果用户没选日期,直接按默认逻辑提交(或者加个提示)
  if (!rawDate) {
    this.submit();
    return;
  }
  
  // 解析原生日期字符串(YYYY-MM-DD)
  const date = new Date(rawDate);
  
  // 转成目标格式:两位数日期 + 月份全称 + 四位年份
  const day = String(date.getDate()).padStart(2, '0'); // 保证日期是两位数,比如6→06
  const month = date.toLocaleString('en-US', { month: 'long' }); // 获取英文月份全称
  const year = date.getFullYear();
  
  const formattedDate = `${day} ${month} ${year}`;
  
  // 构造FormData,替换原来的日期值
  const formData = new FormData(this);
  formData.set('code', formattedDate);
  
  // 发送请求(这里可以替换成你的实际接口地址和请求方式)
  fetch(this.action, {
    method: this.method,
    body: formData
  })
  .then(response => {
    console.log('提交成功!');
    // 这里可以加跳转、提示等逻辑
  })
  .catch(error => {
    console.error('提交出错了:', error);
  });
});
</script>

注意:如果用户禁用了JavaScript,这个方法就会失效,所以如果需要兼容无JS场景,建议优先考虑后端转换或者做双重处理

方案二:后端接收原生格式后转换

这种方法更可靠,不管前端有没有JS,后端都能把接收的YYYY-MM-DD格式转成你要的样式。下面给几个主流后端语言的示例:

PHP示例

if (isset($_POST['code'])) {
  $rawDate = $_POST['code'];
  // 解析原生日期格式
  $date = DateTime::createFromFormat('Y-m-d', $rawDate);
  // 转成目标格式:d(两位数日)、F(月份全称)、Y(四位年)
  $formattedDate = $date->format('d F Y');
  // 后续用$formattedDate处理业务逻辑即可
}

Python(Django/Flask通用)示例

from datetime import datetime

raw_date = request.POST.get('code')
if raw_date:
    # 解析原生格式
    date_obj = datetime.strptime(raw_date, '%Y-%m-%d')
    # 转成目标格式
    formatted_date = date_obj.strftime('%d %B %Y')

Node.js(Express)示例

// 可以用原生Date,也可以用moment.js库
const rawDate = req.body.code;
if (rawDate) {
  // 原生方式
  const date = new Date(rawDate);
  const formattedDate = `${String(date.getDate()).padStart(2, '0')} ${date.toLocaleString('en-US', { month: 'long' })} ${date.getFullYear()}`;
  
  // 或者用moment.js更简洁
  // const moment = require('moment');
  // const formattedDate = moment(rawDate).format('DD MMMM YYYY');
}

两种方法各有优劣:前端处理更灵活,后端处理更稳定。如果是公共站点,建议后端做兜底转换哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:03:38