datetime-local输入时间添加分钟后赋值报错:格式不符合要求
问题分析与解决
报错原因
你遇到的格式错误,是因为Date.toISOString()返回的字符串带有时区后缀Z和毫秒部分(比如2024-02-05T22:12:00.000Z),而你的时间输入框只接受不带时区标识的格式:yyyy-MM-ddThh:mm,或可选的yyyy-MM-ddThh:mm:ss/yyyy-MM-ddThh:mm:ss.SSS。
另外你的代码第一行存在逻辑错误:$("#apptStartTime").val()返回的是字符串类型,直接调用toISOString()会触发TypeError,正确的做法是先把输入值转为Date对象。
修正后的代码
// 获取开始时间输入值并转为Date对象 var startDate = new Date($("#apptStartTime").val()); // 假设从后端获取的服务时长为duration(示例用10,实际替换为接口返回值) var duration = 10; // 计算结束时间:加上服务时长(分钟) var endDate = new Date(startDate.setMinutes(startDate.getMinutes() + parseInt(duration))); // 格式化为输入框要求的格式(截取到分钟,去掉时区和毫秒) var formattedEndTime = endDate.toISOString().slice(0, 16); // 赋值给结束时间输入框 $("#apptEndTime").val(formattedEndTime);
关键说明
slice(0,16):截取toISOString()返回值的前16位,得到yyyy-MM-ddThh:mm格式,完全匹配输入框要求。如果需要保留秒数,可改为slice(0,19)得到yyyy-MM-ddThh:mm:ss格式。- 后端返回的时长是字符串类型,需用
parseInt()转为数字后再进行时间计算。 - 切换服务时,只需把
duration替换为接口返回的字符串值即可。
内容的提问来源于stack exchange,提问作者letsCode
相关产品推荐
相关产品推荐

