如何在ASP.NET中将JavaScript日期传递给datetime类型输入框
ASP.NET中用JavaScript给datetime输入框赋值的正确方式
首先要明确:ASP.NET通过asp-for="EndingDate"生成的<input>,如果绑定的是.NET的DateTime类型,实际渲染后通常是type="datetime-local"(原生datetime类型已被浏览器废弃),这类输入框要求的日期格式是不带时区的YYYY-MM-DDTHH:mm格式。
你之前的代码问题在于:d.toJSON()返回的是UTC时区的ISO字符串(比如"2015-03-24T16:00:00.000Z"),直接赋值会导致日期显示偏移(比如本地时区为东8区的话,2015-03-25会变成2015-03-24)。
以下是两种可靠的实现方式:
方式一:手动构造符合要求的格式字符串
直接提取日期的年、月、日、时、分,拼接成输入框需要的格式:
const d = new Date("2015-03-25"); // 补零确保两位数格式 const year = d.getFullYear(); const month = String(d.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需+1 const day = String(d.getDate()).padStart(2, '0'); const hours = String(d.getHours()).padStart(2, '0'); const minutes = String(d.getMinutes()).padStart(2, '0'); const formattedDate = `${year}-${month}-${day}T${hours}:${minutes}`; $('#enddate').val(formattedDate);
方式二:基于ISO字符串调整时区后截取
通过调整时区偏移量,将UTC时间转为本地时间的ISO字符串,再截取到分钟位:
const d = new Date("2015-03-25"); // 计算本地时区与UTC的偏移毫秒数 const offsetMs = d.getTimezoneOffset() * 60000; // 转换为本地时间的Date对象 const localDate = new Date(d.getTime() - offsetMs); // 截取到分钟位(去掉秒和时区信息) const formattedDate = localDate.toISOString().slice(0, 16); $('#enddate').val(formattedDate);
这两种方式都能确保输入框接收到正确格式的本地日期,避免时区偏移导致的显示错误。
内容的提问来源于stack exchange,提问作者mohammed alani
相关产品推荐
相关产品推荐

