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

求助:jQuery Datepicker设为DD-MM-YYYY格式的报错及格式修正

解决日期格式转为DD-MM-YYYY的问题

我来帮你搞定这个日期格式化的问题哈~先理清楚问题出在哪,再给你两种靠谱的解决方案:

为什么之前会报错?

你最开始用.val()获取datepicker的值时,拿到的是字符串类型的日期,不是Date对象,所以调用getFullYear()自然会抛出date.getFullYear is not a function的错误——毕竟字符串可没有这个方法哦。

而你现在用datepicker('getDate')确实能拿到正确的Date对象,但直接把Date对象赋值给input时,浏览器会自动把它转成默认的长格式字符串(就是你看到的带时区的那种),所以我们需要手动格式化。

解决方案1:用jQuery UI Datepicker自带的格式化方法

这是最省心的方式,直接用官方提供的$.datepicker.formatDate()方法,不用自己写逻辑,兼容性也更好:

var selectedDate = $("[id$=datepicker]").datepicker('getDate');
var date = selectedDate, y = date.getFullYear(), m = date.getMonth();
var firstDay = new Date(y, m, 1);
var lastDay = new Date(y, m + 1, 0);

// 用datepicker自带的方法格式化日期
$("[id$=txtFirstDate]").val($.datepicker.formatDate('dd-mm-yyyy', firstDay));
$("[id$=txtEndDate]").val($.datepicker.formatDate('dd-mm-yyyy', lastDay));

这里的'dd-mm-yyyy'就是你要的格式,dd代表两位日,mm代表两位月,yyyy代表四位年。

解决方案2:自定义格式化函数

如果你不想依赖datepicker的方法,也可以自己写一个通用的格式化函数,处理补0的逻辑(比如把1号变成01,5月变成05):

// 自定义日期格式化函数
function formatToDDMMYYYY(date) {
  const day = String(date.getDate()).padStart(2, '0');
  // 注意月份是从0开始的,所以要+1
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const year = date.getFullYear();
  return `${day}-${month}-${year}`;
}

// 原来的代码部分
var selectedDate = $("[id$=datepicker]").datepicker('getDate');
var date = selectedDate, y = date.getFullYear(), m = date.getMonth();
var firstDay = new Date(y, m, 1);
var lastDay = new Date(y, m + 1, 0);

// 调用自定义函数格式化后赋值
$("[id$=txtFirstDate]").val(formatToDDMMYYYY(firstDay));
$("[id$=txtEndDate]").val(formatToDDMMYYYY(lastDay));

padStart(2, '0')的作用是保证日和月都是两位数字,比如当日期是5号时,会自动补成05,完美符合DD-MM-YYYY的格式要求。

两种方法都能解决你的问题,选哪个都可以~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:05:53