Ext JS:无论浏览器时区如何,都以UTC显示日期

时间:2014-07-04 17:50:37

标签: javascript extjs extjs5

在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

当然有一种更清洁的方式?

2 个答案:

答案 0 :(得分: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'
        }
    ]
});

答案 1 :(得分:2)

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

或者,可以在下面做:

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

utc = d.getTime() + (d.getTimezoneOffset() * 60000);