Ext-js中的自定义渲染器 - Bryntum / ExtJs UTC日期问题

时间:2012-12-14 02:34:11

标签: javascript date extjs utc renderer

我正在尝试将自定义渲染器添加到Bryntum Ext Gantt图表中。

我有在当地时区显示的日期,但我希望在UTC日期显示它们,因为这是数据源用于向用户显示日期(它与浏览器时区无关)的内容来源申请。

这里的帖子让我朝着正确的方向前进(根据我的测试似乎是我需要的):Why does ExtJS subtract a day when formatting a date?

如何将链接的解决方案实现到自定义渲染器


我试过这个并且列是空白的:

{
    xtype:'startdatecolumn',
    sortable: false,
    text: 'Start',
    dataIndex: 'StartDate',
    renderer: function (v, m, r) {
        return Ext.util.Format.date(Ext.Date.parse(v, "Y-m-d"), "m-d-Y");
    }
}

也尝试了这个,列是空白的:

{
    xtype:'startdatecolumn',
    sortable: false,
    text: 'Start',
    dataIndex: 'StartDate',
    renderer: function (v) {
        var dt = Ext.Date.parse(v, "Y-m-d");
        Ext.util.Format.date(dt, "m-d-Y");
        return dt;
    }
}

使用此格式,它以本地时区显示日期(除非设置为UTC,否则不正确)。

{   
    xtype:'enddatecolumn',
    dataIndex: 'EndDate',
    sortable: false,
    text: 'End'
}

Bryntum Column Example

 columns : [
            {
                xtype : 'treecolumn',
                header: 'Tasks',
                sortable: true,
                dataIndex: 'Name',
                width: 200,
                field: {
                    allowBlank: false
                },
                renderer : function(v, meta, r) {
                    if (!r.data.leaf) meta.tdCls = 'sch-gantt-parent-cell';

                    return v;
                }
            },
            {
                xtype : 'startdatecolumn'
            },
            {
                //hidden : true,
                xtype : 'enddatecolumn'
            },

1 个答案:

答案 0 :(得分:2)

使用此功能修复:

function niceDate (v, m, r) {
            var dt =    padStr(1 + v.getMonth()) + 
                        '-' +
                        padStr(v.getDate()) +
                        '-' +
                        padStr(v.getFullYear());
            return dt;
           }

function padStr(i) {
    return (i < 10) ? "0" + i : "" + i;
}

并在列渲染器中:

                   {
                    xtype:'startdatecolumn',
                    sortable: false,
                    text: 'Start',
                    dataIndex: 'StartDate',
                    renderer: niceDate
                    }

解析xml时,我使用带有以下时间戳的开关函数:

case 'timestamp':
    if(!empty(v))
    v = new Date(parseInt(v));
    break;

这似乎可以将“日期”对象可靠地提供给ext.js,并且使用渲染器渲染列以匹配我们的源日期格式。