Я столкнулся с этой же проблемой, потому что мне нравится передавать свои даты как метки времени Unix, и у меня было требование отображать их в различных форматах в зависимости от контекста. Вот как я это сделал.
Если вы загружаете данные через хранилище, вы можете использовать функцию преобразования, предоставляемую Ext.data.Field. Например:
var fields = [
{name: 'sysTestedDateObj', mapping: 'sysTestedDateTS', type: 'date', dateFormat: 'timestamp'},
/** Converted Fields **/
{name: 'sysTestedDate', convert: function(v, rec){
return fmtDate('sysTestedDateTS', rec);
}},
{name: 'targetChangeStartDate', convert: function(v, rec){
return fmtDate('targetChangeStartDateTS', rec);
}},
{name: 'createDateTime', convert: function(v, rec){
return fmtDateTime('createDateTS', rec);
}},
{name: 'modifyDateTime', convert: function(v, rec){
return fmtDateTime('modifyDateTS', rec);
}},
];
var store = new Ext.data.JsonStore({
...
fields: fields
});
Вот некоторые функции преобразования:
function fmtDate(sf, rec) {
if ( rec[sf] ) {
var dt = new Date(); dt.setTime(rec[sf] * 1000); return dt.format('l j F Y');
}
};
function fmtDateShort(sf, rec) {
if ( rec[sf] ) {
var dt = new Date(); dt.setTime(rec[sf] * 1000); return dt.format('D j M Y');
}
};
function fmtDateTime(sf, rec) {
if ( rec[sf] ) {
var dt = new Date(); dt.setTime(rec[sf] * 1000); return dt.format('l j F Y h:i a');
}
};
function fmtDateTimeShort(sf, rec) {
if ( rec[sf] ) {
var dt = new Date(); dt.setTime(rec[sf] * 1000); return dt.format('D j M Y h:i a');
}
};
Где sf - поле источника, из которого мы получаем отформатированную строку даты.
Обратите внимание на следующее, это важно. Функция convert () представлена с копией записи данных , прочитанной читателем (это в документации ExtJS). Это означает, что вы не можете использовать никакие сопоставленные поля в своих конверсиях. В приведенном выше массиве полей у меня есть поле, определенное как
{name: 'sysTestedDateObj', mapping: 'sysTestedDateTS', type: 'date', dateFormat: 'timestamp'}
Итак, я создаю объект даты sysTestedDateObj из поля sysTestedDateTS, и я сказал читателю, что хочу, чтобы он предоставил мне объект даты, полученный из объекта, содержащего метку времени Unix. Это хороший объект для дальнейшего использования, но он не будет частью записи данных, передаваемой нашей функции преобразования.
Также обратите внимание, что функция преобразования может ссылаться на поля в записи, которые не определены для использования хранилищем. В приведенном выше примере я использовал поле sysTestedDateTS в функции преобразования, потому что я знаю, что сервер предоставляет его в своем ответе JSON, но поскольку я не определил его в массиве полей, он не будет доступен через хранилище для потребляющий компонент.