You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.Net模型日期转JS问题:ko数组中日期格式异常如何转换?

搞定ASP.NET JSON序列化的日期格式问题

嗨,这个问题我之前也碰到过,给你捋捋清楚~

首先,你看到的/Date(1520582400000)/是ASP.NET早期默认的JSON日期序列化格式:它本质是把.NET的DateTime对象转换成了毫秒级时间戳(1520582400000就是从1970年1月1日UTC零点开始到2018年3月9日的毫秒数),外面套了/Date()的壳子,是当时ASP.NET内置JSON序列化器的标准输出方式。

接下来给你两种最实用的解决办法,按需选就行:

方法一:在C#端换用Json.NET序列化(推荐)

ASP.NET内置的Json.Encode比较老旧,换成Newtonsoft.Json(也就是Json.NET,现在.NET生态里的常用序列化库)来序列化,直接就能输出JS原生支持的ISO 8601格式日期(比如"2018-03-09T00:00:00"),不用额外处理:

var List = @(Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.Item)));

这样你在JS里直接new Date(List.Date)就能得到正确的Date对象,Knockout也能直接绑定使用。

方法二:在JS端写工具函数转换

如果不想改后端代码,就写个简单的JS函数把/Date(xxx)/格式转成JS Date对象或者你需要的字符串格式:

// 把ASP.NET格式日期转成JS Date对象
function parseAspNetDate(aspDateStr) {
    // 提取括号里的时间戳数字
    const timestamp = parseInt(aspDateStr.match(/\d+/)[0]);
    return new Date(timestamp);
}

// 使用示例:
const jsDate = parseAspNetDate(List.Date);
// 如果要转成"3/9/2018"这种格式
const formattedDate = jsDate.toLocaleDateString('en-US'); // 输出"3/9/2018"

要是用Knockout,还可以把这个逻辑封装成计算属性,方便绑定:

const viewModel = {
    item: ko.observable(List),
    displayDate: ko.computed(function() {
        const aspDate = this.item().Date;
        const date = parseAspNetDate(aspDate);
        return date.toLocaleDateString('en-US');
    }, viewModel)
};

简单总结下:这个格式就是ASP.NET老序列化器的特殊日期写法,要么换更现代的序列化工具从根源解决,要么在前端写转换函数处理~

内容的提问来源于stack exchange,提问作者BStill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:54:31