ASP.Net MVC转JavaScript的日期格式解析及Date对象转换方法咨询
关于ASP.NET序列化日期格式的转换方案
嘿,你遇到的/Date(1521617700000)/格式,是ASP.NET传统JSON序列化的日期格式——它是把.NET里的DateTime对象,转成了以/Date()包裹的毫秒时间戳,括号里的数字是从1970年1月1日UTC开始计算的毫秒数,本质就是Unix时间戳的毫秒版。
下面给你两种解决思路,按需选择:
1. 前端直接转换现有格式
如果没法改动后端代码,你可以在前端写个小工具函数,提取出里面的毫秒数,再转换成JS的Date对象:
// 定义转换函数 function parseAspNetDate(dateString) { // 用正则提取括号内的数字部分 const timestampMatch = dateString.match(/\d+/); if (!timestampMatch) { throw new Error("Invalid ASP.NET date format"); } // 转成整数后生成Date对象 return new Date(parseInt(timestampMatch[0], 10)); } // 处理你的TimerEvents数组 TimerEvents.forEach(event => { // 把EventTime转换成Date对象 event.EventTime = parseAspNetDate(event.EventTime); // 如果你需要getTime()的结果,直接调用就行 const countDownDate = event.EventTime.getTime(); // 这里可以做后续的倒计时逻辑 });
2. 后端修改序列化格式(更推荐)
如果有权限改动后端代码,建议直接把日期序列化成ISO 8601标准格式(比如2018-03-21T12:15:00Z),这种格式可以被JavaScript的Date构造函数直接识别,不用额外转换。
在ASP.NET中,你可以通过配置JSON序列化器来实现:
- 如果你用的是Newtonsoft.Json(Json.NET),可以在配置里设置:
JsonSerializerSettings settings = new JsonSerializerSettings(); settings.DateFormatHandling = DateFormatHandling.IsoDateFormat; // 序列化时使用这个配置 string json = JsonConvert.SerializeObject(Model.PendingTimerEvents, settings); - 如果你用的是ASP.NET Core的System.Text.Json,可以这样配置:
(具体配置可以根据你的.NET版本调整,核心是让日期输出为ISO标准格式)services.AddControllers() .AddJsonOptions(options => { // 设置日期格式为ISO 8601 options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.Converters.Add(new DateTimeConverter()); });
这样后端返回的日期字符串,前端直接new Date(event.EventTime)就能得到正确的Date对象,代码更简洁,也更符合JSON的通用规范。
内容的提问来源于stack exchange,提问作者chuckd
相关产品推荐
相关产品推荐

