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
相关产品推荐
相关产品推荐

