ASP.NET MVC中Ajax获取DateTime显示为/Date(xxx)/问题求助
解决ASP.NET MVC Ajax返回日期显示为/Date(xxx)/的问题
方法一:后端直接返回格式化后的日期字符串
修改Controller代码,将DateTime对象转换为指定格式的字符串后返回,前端无需额外处理即可直接赋值:
public JsonResult GetWorkDuration(int Id) { if (Id != 0) { int workDuration = db.Services.First(x => x.Id == Id).Work_Duration_Dates; DateTime serviceEndDate = DateTime.Now.AddDays(workDuration); // 按照你需要的格式转换,示例为MM/dd/yyyy hh:mm:ss tt(对应10/7/2022 12:32:48 PM) return Json(new { Success = true, EndDate = serviceEndDate.ToString("MM/dd/yyyy hh:mm:ss tt") }); } else { return Json(new { Success = false }); } }
方法二:全局配置JSON序列化规则
如果希望所有接口返回的日期都统一格式,可在全局配置JSON序列化设置,让ASP.NET返回ISO标准格式或自定义格式的日期:
在Global.asax的Application_Start方法中添加配置:
protected void Application_Start() { // 其他初始化代码... JsonSerializerSettings jsonSettings = new JsonSerializerSettings(); // 方式1:返回ISO标准格式日期(如"2022-10-07T12:32:48") jsonSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat; // 方式2:指定自定义格式 // jsonSettings.DateFormatString = "MM/dd/yyyy hh:mm:ss tt"; GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = jsonSettings; }
配置后,前端拿到ISO格式日期后,可通过JavaScript的Date对象进一步格式化:
success: function (data) { if (data.Success == true) { var dateObj = new Date(data.EndDate); var formattedDate = dateObj.toLocaleString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: true }); document.getElementById('WorkDuration').value = formattedDate; } }
方法三:前端解析/Date(xxx)/格式字符串
如果无法修改后端代码,可在前端编写工具函数解析这种微软特定的JSON日期格式:
// 解析ASP.NET格式的日期字符串 function parseAspNetDate(dateStr) { var timestamp = parseInt(dateStr.match(/\d+/)[0]); return new Date(timestamp); } // 在Ajax成功回调中使用 success: function (data) { if (data.Success == true) { var dateObj = parseAspNetDate(data.EndDate); var formattedDate = dateObj.toLocaleString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: true }); document.getElementById('WorkDuration').value = formattedDate; } }
也可以用更简洁的写法直接提取时间戳:
var dateObj = new Date(parseInt(data.EndDate.substr(6)));
内容的提问来源于stack exchange,提问作者Dev Beginner
相关产品推荐
相关产品推荐

