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

如何在服务端模式的jQuery DataTable中格式化日期时间列

解决jQuery DataTables日期列显示/Date(xxx)/格式的问题

这是ASP.NET中常见的JSON日期序列化问题——默认的JsonResult会把DateTime类型序列化成/Date(ticks)/这种格式,咱们可以从前端DataTables处理或者后端C#序列化处理两个方向解决,看你更倾向哪种:


方案1:前端DataTables中格式化日期(推荐,保留后端原始数据)

这种方式不用修改后端逻辑,直接在DataTables的列配置中通过render函数转换格式,灵活性更高。

步骤1:编写通用的JSON日期解析函数

先写一个工具函数,用来把/Date(1373947200000)/这种格式的字符串转换成JavaScript的Date对象:

function parseJsonDate(jsonDate) {
    // 提取字符串中的时间戳部分
    var timestamp = parseInt(jsonDate.match(/\d+/)[0]);
    return new Date(timestamp);
}

步骤2:修改DataTables的列配置

给对应的日期列添加render函数,根据需求格式化日期/日期时间:

  • RECEIVED_DATE是纯日期,格式化为yyyy-MM-dd
  • AUDIT_CREATE_DT和AUDIT_UPDT_DT是日期时间,格式化为yyyy-MM-dd HH:mm:ss

修改后的完整columns配置代码:

"columns": [
    { "data": "STS", "name": "STS" },
    { 
        "data": "RECEIVED_DATE", 
        "name": "RECEIVED_DATE",
        "render": function(data, type, row) {
            if (!data) return ""; // 处理空值
            var date = parseJsonDate(data);
            // 格式化纯日期:年-月-日(补零保证两位)
            return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
        }
    },
    { "data": "MBR_AGP_ID_NUM", "name": "MBR_AGP_ID_NUM" },
    { "data": "MBR_FST_NME", "name": "MBR_FST_NME" },
    { "data": "MBR_LST_NME", "name": "MBR_LST_NME" },
    { "data": "CREATE_USR_ID", "name": "CREATE_USR_ID" },
    { 
        "data": "AUDIT_CREATE_DT", 
        "name": "AUDIT_CREATE_DT",
        "render": function(data, type, row) {
            if (!data) return "";
            var date = parseJsonDate(data);
            // 格式化日期时间:年-月-日 时:分:秒
            return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
        }
    },
    { "data": "UPDT_USR_ID", "name": "UPDT_USR_ID" },
    { 
        "data": "AUDIT_UPDT_DT", 
        "name": "AUDIT_UPDT_DT",
        "render": function(data, type, row) {
            if (!data) return "";
            var date = parseJsonDate(data);
            // 和创建日期保持一致的格式
            return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
        }
    },
]

方案2:后端C#序列化时直接转换为字符串格式

如果希望前端逻辑更简单,可以在后端返回JSON之前,把DateTime类型直接转成指定格式的字符串。

修改你的GetList方法中的数据包装部分,用匿名类来格式化日期字段:

[HttpPost]
public ActionResult GetList()
{
    //Server side Parameters
    int start = Convert.ToInt32(Request["start"]);
    int length = Convert.ToInt32(Request["length"]);
    string searchValue = Request["search[value]"];
    string sortColumnName = Request["columns[" + Request["order[0][column]"] + "][Name]"];
    string sortDirection = Request["order[0][dir]"];

    List<DISPRTY_FORM> disprtyFormList = new List<DISPRTY_FORM>();
    using (DBModel db = new DBModel())
    {
        disprtyFormList = db.DISPRTY_FORM.ToList<DISPRTY_FORM>();
        int totalrows = disprtyFormList.Count;
        //Todo filtering
        int totalRowsAfterFiltering = disprtyFormList.Count;
        //sorting
        disprtyFormList = disprtyFormList.OrderBy(sortColumnName + " " + sortDirection).ToList<DISPRTY_FORM>();
        //paging
        disprtyFormList = disprtyFormList.Skip(start).Take(length).ToList<DISPRTY_FORM>();

        // 格式化日期字段为字符串
        var formattedData = disprtyFormList.Select(item => new {
            STS = item.STS,
            RECEIVED_DATE = item.RECEIVED_DATE?.ToString("yyyy-MM-dd"),
            MBR_AGP_ID_NUM = item.MBR_AGP_ID_NUM,
            MBR_FST_NME = item.MBR_FST_NME,
            MBR_LST_NME = item.MBR_LST_NME,
            CREATE_USR_ID = item.CREATE_USR_ID,
            AUDIT_CREATE_DT = item.AUDIT_CREATE_DT?.ToString("yyyy-MM-dd HH:mm:ss"),
            UPDT_USR_ID = item.UPDT_USR_ID,
            AUDIT_UPDT_DT = item.AUDIT_UPDT_DT?.ToString("yyyy-MM-dd HH:mm:ss")
        });

        var jsonResult = Json(new { 
            data = formattedData, 
            draw = Request["draw"], 
            recordsTotal = totalrows, 
            recordsFiltered = totalRowsAfterFiltering 
        }, JsonRequestBehavior.AllowGet);
        jsonResult.MaxJsonLength = int.MaxValue;
        return jsonResult;
    }
}

这样后端返回的JSON中,日期字段已经是格式化好的字符串,前端DataTables可以直接显示,不需要额外处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:42:19