jqGrid日期格式生成错误的AM / PM

时间:2012-08-27 06:42:07

标签: jqgrid jqgrid-formatter

我在jqgrid中有列建模如下:

colModel: [
          ...
          { name: 'TranDate', index: 'TranDate', search: false, width: 150, 
            sorttype: 'date', formatter: 'date', 
            formatoptions: { srcformat: 'Y-m-d H:i:s A', newformat: 'd-M-Y h.i A'} },
         ...
         ],

从JSON返回的数据具有以下格式2012-07-06 3:25:19 PM但是当使用上述格式在网格上显示时,它会将PM切换为AM,但{{1}之间的时间除外} 12:01

此问题与AM/PM date formatting in jqGrid类似,但即使在进行修改后,问题仍然存在。

我错过了什么或做错了什么?

2 个答案:

答案 0 :(得分:0)

之所以这样做是因为它假设您的时间为24小时制。你的代码应该修复它,但我找不到它的错误。

但是,这将为你解决这个问题

只需替换此

formatter: 'date', formatoptions: { srcformat: 'Y-m-d H:i:s A', newformat: 'd-M-Y h.i A'} },

用这个

datefmt: "Y-m-d h:i A" 

在这里你无法将'Y-m-d'改为'd-M-Y'。

答案 1 :(得分:0)

问题是jquery.fmatter.js中的DateFormat函数不支持srcformat中的AM / PM:

    // Tony Tomov
    // PHP implementation. Sorry not all options are supported.
    // Feel free to add them if you want
    DateFormat : function (format, date, newformat, opts)  {

具体来说,您可以在下面看到解析给定日期时不支持A选项:

        } else {
            date = String(date).split(/[\\\/:_;.,\t\T\s-]/);
            format = format.split(/[\\\/:_;.,\t\T\s-]/);
            // parsing for month names
            for(k=0,hl=format.length;k<hl;k++){
                if(format[k] == 'M') {
                    dM = $.inArray(date[k],dateFormat.i18n.monthNames);
                    if(dM !== -1 && dM < 12){date[k] = dM+1;}
                }
                if(format[k] == 'F') {
                    dM = $.inArray(date[k],dateFormat.i18n.monthNames);
                    if(dM !== -1 && dM > 11){date[k] = dM+1-12;}
                }
                if(date[k]) {
                    ts[format[k].toLowerCase()] = parseInt(date[k],10);
                }
            }
            if(ts.f) {ts.m = ts.f;}
            if( ts.m === 0 && ts.y === 0 && ts.d === 0) {
                return "&#160;" ;
            }
            ts.m = parseInt(ts.m,10)-1;
            var ty = ts.y;
            if (ty >= 70 && ty <= 99) {ts.y = 1900+ts.y;}
            else if (ty >=0 && ty <=69) {ts.y= 2000+ts.y;}
            timestamp = new Date(ts.y, ts.m, ts.d, ts.h, ts.i, ts.s, ts.u);
        }

您有几个选择。如果您可以修改Web服务,则可以使用不同的格式(例如unix时间戳)返回日期,或者让它以支持的格式返回新的日期列。或者,您可以将此报告为jqGrid错误和/或修复代码的此部分以支持AM / PM说明符。