2014-07-04 7 views
2

Каков наилучший способ заставить даты отображаться в UTC (и игнорировать локальное время браузера) в сетке Ext JS?Ext JS: Показать даты в UTC, независимо от часового пояса браузера

Моя модель получает даты в формате 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 

Наверняка есть более чистый способ ?

ответ

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' 
     } 
    ] 
}); 
2

Его там в последней ExtJS. Используйте toUTCstring() или другие доступные toUTC xxxx() методы.

в качестве альтернативы, можно сделать ниже:

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

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