jqgrid 将 Epoch 日期值显示为错误日期?

jqgrid display Epoch date value as wrong date?

当服务器将日期存储为纪元时间时,日期似乎未正确呈现。 jqrid 格式使用它 "u" 或 "U" 但它不会在网格上呈现正确的日期。

我已经在 Fiddler 创建了演示:http://jsfiddle.net/SalesforceDev/duooa5oy/2/

$(function () {
    "use strict";
    var mydata = [
        { 
            data: 1489449600000, 
            status: "OPEN"
        }, 
        { 
            data: 1489449600000, 
            status: "ENTERED"
        }];

    $("#grid").jqGrid({
        data: mydata,
        colModel: [
            { name: 'act', template: "actions" },
            { 
                name: 'data', 
                editrules: { required: true },
                formatter: 'date',
                formatoptions: {
                    srcformat: 'u',
                    newformat: 'd/m/Y H:i'
                },
                editable: true, 
                editoptions: {
                    dataInit: function (el) {
                        $(el).datetimepicker({
                            locale: 'en-GB',
                            //debug: true,
                            widgetPositioning: {
                                horizontal: 'auto',
                                vertical: 'auto'
                            },
                            widgetParent: '#outer'
                        });
                        // fix position of the datetimepicker
                        $(el).bind("dp.show", function () {
                            var $datepicker = $("#outer .bootstrap-datetimepicker-widget");
                            if ($datepicker.length > 0) {
                                $datepicker.css("top",
                                    this.getBoundingClientRect().top +
                                    window.pageYOffset +
                                    $(this).outerHeight());
                            }
                        });
                    }
                }
            },
            {
                name: 'status',
                width: 180
            }
        ],
        iconSet: "fontAwesome",
        guiStyle: "bootstrap",
        hoverrows: false,
        pager: true   
    });
    //
    $("#show-date").text("1489449600000 ==>"+(new Date(1489449600000)));
});

更新 1 当我尝试使用 fotmatter 选项时,网格停止渲染并抛出异常。演示:http://jsfiddle.net/SalesforceDev/duooa5oy/3/

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

chrome 异常:

Uncaught TypeError: Cannot read property 'DateFormat' of undefined
    at HTMLTableElement.formatter (VM317:111)
    at HTMLTableElement.d.formatter (jquery.jqgrid.src.js:3369)
    at aa (jquery.jqgrid.src.js:2276)
    at HTMLTableElement.parseDataToHtml (jquery.jqgrid.src.js:2334)
    at HTMLTableElement.Z (jquery.jqgrid.src.js:3926)
    at L (jquery.jqgrid.src.js:4404)
    at HTMLTableElement.ca (jquery.jqgrid.src.js:4476)
    at HTMLTableElement.<anonymous> (jquery.jqgrid.src.js:5787)
    at Function.each (VM312 jquery.min.js:2)
    at r.fn.init.each (VM312 jquery.min.js:2)
    at r.fn.init.b.fn.jqGrid (jquery.jqgrid.src.js:2505)
    at HTMLDocument.<anonymous> (VM317:101)
    at j (VM312 jquery.min.js:2)
    at k (VM312 jquery.min.js:2)

更新 3

现在使用格式 u1000 之后,但是当您提交保存操作时,从网格行的对象中读取日期会给出错误的日期!

https://jsfiddle.net/SalesforceDev/duooa5oy/12/

查看演示

srcformat: 'u' 的用法对于以下日期是正确的

var mydata = [
    { 
        data: 1489449600, 
        status: "OPEN"
    }, 
    { 
        data: 1489449600, 
        status: "ENTERED"
    }];

(参见 http://jsfiddle.net/duooa5oy/9/)。

如果您想使用

var mydata = [
    { 
        data: 1489449600000, 
        status: "OPEN"
    }, 
    { 
        data: 1489449600000, 
        status: "ENTERED"
    }];

,那么你应该使用 srcformat: 'u1000'。查看修改后的演示 https://jsfiddle.net/duooa5oy/8/.

更新: 我发布的 the bug fix to GitHub, which solves the problem with editing dates, if one uses srcformat: 'u1000'. The demo https://jsfiddle.net/OlegKi/duooa5oy/14/ 使用了 GitHub 的最新代码,现在可以正常工作了。