#javascript #extjs #extjs5
#javascript #extjs #extjs5
Вопрос:
Каков наилучший способ принудительно отображать даты в UTC (и игнорировать местное время браузера) в сетке Ext JS?
Моя модель получает даты в UTC:
"2014-06-24T00:00:00 00:00"
В моей сетке есть столбец datecolumn:
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
Наверняка есть более чистый способ?
Ответ №1:
Я не вижу встроенной поддержки 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'
}
]
});
Ответ №2:
Это есть в последней версии EXTJS. Используйте toUTCstring()
или другие доступные методы toUTC xxxx().
в качестве альтернативы, можно сделать следующее:
// convert to msec
// add local time zone offset
// get UTC time in msec
utc = d.getTime() (d.getTimezoneOffset() * 60000);