2

在 Ext JS 网格中强制日期以 UTC 显示(并忽略浏览器本地时间)的最佳方法是什么?

我的模型接收 UTC 日期:

"2014-06-24T00:00:00+00:00"

我的网格有一个日期列:

Ext.define('MyApp.view.MyGrid', {
    store: MyApp.store.MyStore,
    columns: [
        {
            xtype: 'datecolumn',
            text: 'Date',
            dataIndex: 'date',
            format: 'Y-m-d H:i:sO'
        },
    ]
});

日期以浏览器本地时间显示,例如:

2014-06-24 01:00:00+0100

但我想以 UTC 显示它们。

到目前为止,我发现的最佳解决方案是导入moment.js并使用它:

{
    xtype: 'datecolumn',
    text: 'Date',
    dataIndex: 'date',
    renderer: function (value) {
        return moment.utc(value).format('YYYY-MM-DD HH:mm:ssZZ');
    }
}

哪个具有预期的结果:

2014-06-24 00:00:00+0000

当然有更清洁的方法吗?

4

2 回答 2

3

我没有看到内置的 UTC 支持,因此您可以例如扩展datecolumn和使用moment来呈现日期。例子:

Ext.define('Ext.grid.column.UtcDate', {
    extend: 'Ext.grid.column.Date',
    alias: ['widget.utcdatecolumn'],
    alternateClassName: 'Ext.grid.UtcDateColumn',

    defaultRenderer: function(value){
        return moment.utc(value).format(this.format);
    }
});

然后只需utcdatecolumn使用datecolumn

Ext.define('MyApp.view.MyGrid', {
    store: MyApp.store.MyStore,
    columns: [
        {
            xtype: 'utcdatecolumn',
            text: 'Date',
            dataIndex: 'date',
            format: 'YYYY-MM-DD HH:mm:ssZZ'
        }
    ]
});
于 2014-07-08T14:48:46.157 回答
3

它存在于最新的 ExtJs 中。使用toUTCstring()或其他可用的 toUTC xxxx() 方法。

或者,可以执行以下操作:

// convert to msec
// add local time zone offset 
// get UTC time in msec

utc = d.getTime() + (d.getTimezoneOffset() * 60000);
于 2015-08-28T09:29:27.923 回答