如何使用JavaScript转换ASP.NET返回的/Date(时间戳)/格式日期?
解决.NET DateTime序列化后的日期格式转换问题
当然可以用JavaScript转换这种/Date(1666677654000)/格式的日期,这是.NET默认序列化DateTime类型时生成的JSON格式,里面的数字是毫秒级Unix时间戳,以下是几种实用的转换方法:
方法一:提取时间戳转换为Date对象
先通过正则提取字符串中的数字时间戳,再用Date构造函数转换:
// 假设从AJAX响应中拿到的日期字符串 const dateStr = "/Date(1666677654000)/"; // 提取毫秒数 const timestamp = parseInt(dateStr.match(/\d+/)[0]); // 生成Date对象 const date = new Date(timestamp);
方法二:正则替换直接转换
用正则替换简化提取步骤:
const dateStr = "/Date(1666677654000)/"; const date = new Date(+dateStr.replace(/\/Date\((\d+)\)\//, '$1'));
格式化日期为可读字符串
拿到Date对象后,可以自定义函数将其格式化为需要的样式(比如YYYY-MM-DD HH:mm:ss):
function formatDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; } // 使用示例 const formattedDate = formatDate(date); // 输出示例:2022-10-24 10:40:54
AJAX请求时自动处理(jQuery示例)
如果用jQuery发起AJAX请求,可以通过dataFilter配置提前处理所有日期格式,避免后续重复转换:
$.ajax({ url: '你的接口地址', type: 'GET', dataFilter: function(rawData) { // 全局替换所有/Date(xxx)/格式为纯时间戳 const processedData = rawData.replace(/\/Date\((\d+)\)\//g, '$1'); return JSON.parse(processedData); }, success: function(response) { // 此时响应中的dateCreated已转为数字时间戳,直接转换即可 response.forEach(item => { item.dateCreated = formatDate(new Date(item.dateCreated)); // 将格式化后的日期插入HTML表格 }); } });
内容的提问来源于stack exchange,提问作者user20066177
相关产品推荐
相关产品推荐

