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

jqGrid自定义格式化器调用MomentJS处理时间戳无效求助

我来帮你排查这个问题并给出两种实用解决方案:

一、修复你的自定义格式化器问题

你当前的自定义格式化器之所以不生效,核心原因是返回了moment对象而非字符串——jqGrid的单元格格式化器要求返回可直接渲染的文本或HTML内容,而不是对象。

修改后的代码可以简化并修复这个问题:

$.extend($.fn.fmatter, {
  customTimestampToDate: function (cellvalue, options, rowdata) {
    // 直接用moment处理秒级时间戳(乘1000转成moment支持的毫秒级)
    const timestampMs = parseInt(rowdata.timestamp) * 1000;
    // 调用format方法输出你需要的日期格式,比如YYYY-MM-DD HH:mm:ss
    return moment(timestampMs).format('YYYY-MM-DD HH:mm:ss');
  }
});

这里还简化了步骤:不需要先转成Date再生成ISO字符串,moment可以直接处理毫秒级时间戳,更高效。

二、用jqGrid内置的日期格式化器(更推荐)

其实你完全不用自己写自定义函数,jqGrid本身内置了date格式化器,专门处理时间戳/日期格式转换,配置起来更简单:

colModel: [
  // ...其他列配置
  { 
    name: "timestamp", 
    search: true, 
    stype: "text", 
    formatter: "date",
    formatoptions: {
      srcformat: "U", // 表示源数据是**秒级**Unix时间戳;如果是毫秒级就用"u"
      newformat: "Y-m-d H:i:s" // 自定义输出格式,比如只显示日期可以写"Y-m-d"
    }
  }
],
  • srcformat: "U"对应Unix时间戳(单位秒),如果你的时间戳是毫秒级,替换成srcformat: "u"即可。
  • newformat支持多种格式占位符,比如Y代表四位年份,m是两位月份,d是两位日期,H是24小时制小时,i是分钟,s是秒。

关于库加载顺序的验证

你当前的加载顺序是正确的:jQuery → jQuery Migrate → MomentJS → jqGrid,确保Moment在jqGrid之前加载就不会有依赖问题,所以这不是你当前失效的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:12:15