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

如何在JavaScript中将dd/MM/yyyy格式日期转换为dd/mm/yyyy?

如何将日期选择器显示的日期格式转换为指定格式保存?

问题背景

我使用jQuery UI Datepicker实现日期选择字段,初始化代码如下:

$(function() {
      $('.dob').datepicker({
            dateFormat: 'dd/MM/yyyy',
      });
});

用户选择日期后,页面显示的格式为02 March 2002,我需要保持页面显示格式不变,但提交保存时转换为02/03/2002这种dd/mm/yyyy格式。尝试过Java的SimpleDateFormat加Locale参数,但未生效,求解决方法。


解决方案

方案1:直接利用Datepicker内置方法获取日期对象格式化(前端推荐)

不需要处理显示的字符串,直接通过Datepicker的getDate()方法获取选中的Date对象,再手动格式化为目标格式,避免字符串解析的风险:

// 触发保存操作时执行
const selectedDate = $('.dob').datepicker('getDate');
if (selectedDate) {
  // 处理日期补零
  const day = String(selectedDate.getDate()).padStart(2, '0');
  // 注意:月份是0-based,需加1后补零
  const month = String(selectedDate.getMonth() + 1).padStart(2, '0');
  const year = selectedDate.getFullYear();
  
  const savedDate = `${day}/${month}/${year}`;
  // 将savedDate传入保存逻辑即可
  console.log(savedDate); // 输出:02/03/2002
}

方案2:处理已有的显示字符串(前端)

如果必须基于页面显示的字符串(如02 March 2002)转换,可通过Date对象解析后再格式化:

const displayDateStr = '02 March 2002';
const dateObj = new Date(displayDateStr);

// 校验日期是否有效
if (!isNaN(dateObj.getTime())) {
  const day = String(dateObj.getDate()).padStart(2, '0');
  const month = String(dateObj.getMonth() + 1).padStart(2, '0');
  const year = dateObj.getFullYear();
  
  const savedDateStr = `${day}/${month}/${year}`;
  console.log(savedDateStr); // 输出:02/03/2002
}

方案3:Java后端正确处理(针对你提到的SimpleDateFormat无效问题)

如果是后端Java处理显示字符串,需注意月份格式符和Locale的匹配:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateConverter {
    public static void main(String[] args) throws Exception {
        String displayDate = "02 March 2002";
        // 用英文Locale解析带月份全称的日期
        SimpleDateFormat inputFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.ENGLISH);
        Date date = inputFormat.parse(displayDate);
        
        // 格式化为dd/MM/yyyy(注意:MM是数字月份,mm是分钟,别写错)
        SimpleDateFormat outputFormat = new SimpleDateFormat("dd/MM/yyyy");
        String savedDate = outputFormat.format(date);
        System.out.println(savedDate); // 输出:02/03/2002
    }
}

之前无效可能是因为:

  • 输入格式符写错(比如用了MM而不是MMMM匹配月份全称)
  • Locale未设置为英文,导致无法识别March这类英文月份名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:37:17