【问题标题】:jqGrid Doesn't Sort When Showing Epoch Time (since as milliseconds) as Date将纪元时间(以毫秒为单位)显示为日期时,jqGrid 不排序
【发布时间】:2011-12-01 13:01:47
【问题描述】:

我使用 jqGrid,我的网格定义是这样的:

...
colNames:['Type','Date','Message','User Name','Host'],
colModel:[{name:'type',index:'type', width:100},
{name:'date',index:'date', sorttype:'date', formatter:'date', 
  formatoptions: {newformat:'d-M-Y'}, width:100},
{name:'log',index:'log', width:200},
{name:'username',index:'username', width:50},
{name:'host',index:'host', width:50}], 
...

当我调试即将到来的数据时,其中一个日期值(它是数字)如下:

1322550786997

网格是这样显示的:

29-Nov-2011

到目前为止一切正常。但是,当我想对日期列进行排序时,它不会改变任何内容。

有什么想法吗?

【问题讨论】:

  • 哪种数据类型有 1322550786997?是String 还是Number

标签: json jqgrid epoch


【解决方案1】:

问题是 Unix (formatoptions: {srcformat: 'U', newformat: 'd-M-Y'}) 日期1322550786997 的解码得到19-Dec-43879 而不是29-Nov-2011。您正确的日期表示将是字符串"\/Date(1322550786997)\/",而不是数字1322550786997

the demo:

更新:您还可以使用以下自定义格式化程序作为解决方法

formatter: function (cellval, opts) {
    var date = new Date(cellval);
    opts = $.extend({}, $.jgrid.formatter.date, opts);
    return $.fmatter.util.DateFormat("", date, 'd-M-Y', opts);
}

它创建Date,然后使用原始date 格式化程序将其转换为'd-M-Y' 格式。请参阅here 演示。

【讨论】:

  • 感谢您的帮助,但我想我错过了一些东西。我从 Java 获得时间,我认为它的日期是自纪元时间以来的毫秒数。
  • @kamaci:如果您从 Java 发布日期,您最好使用 ISO 8601 日期格式(请参阅 herehere)。这是 jqGrid 使用的标准输入格式。
  • @kamaci:您可以使用我在回答的 UPDATED 部分中描述的解决方法。
  • @Powerlord:我不确定你的意思。你的意思是两个演示中的哪一个?此外,自从我写了答案以来,srcformat: 'U'(或'u')的实现发生了变化。你有什么问题,你做了什么,什么不像预期的那样工作?使用自定义格式化程序的第二个演示必须工作。或者,您可以尝试使用Globalize 插件进行日期格式设置。请参阅the answer,它使用货币,但日期将以相同的方式工作。
  • 此解决方案适用于 4.3.2,但是否有适用于 4.6.0 的更新解决方案?似乎 DateFormat 函数已从 util 包中删除。也许是误会?还是有什么可以代替的?
猜你喜欢
  • 2014-03-14
  • 1970-01-01
  • 2011-01-20
  • 2022-11-27
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
相关资源
最近更新 更多