在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
当然有一种更清洁的方式?
答案 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);