2011-09-07 3 views
1

Я не могу понять, как преобразовать дату и время, которое wcf выводит в datetime, которые могут использовать ExtJs. Я нашел много статей об этом, но все они для ExtJs 3, и я не мог заставить его работать с 4.ExtJs 4 Отображение WCF DateTime

Я нашел этот код, но не знаю, как я мог бы его использовать для преобразования всего в моем JsonStore.

//this method is used to convert the MS JSON date format to the ExtJS Grid Date Column Value 
function dateFormatter(dt) { 
    /// <summary>this method is used to convert the MS JSON date format to the ExtJS Grid Date Column Value</summary> 
    /// <param name="dt">Actual JSON Date Value</param> 
    try { 
     //microsoft JSON date format needs to convert into Javascript date 
     var newdata = dt.replace(/\/Date\((-?[0-9]+)([+-][0-9]+)?\)\//g, "new Date($1)"); 
     newdata = eval('(' + newdata + ')'); 
     return newdata.format('m/d/Y'); 
    } 
    catch (e) { 
     return dt; 
    } 
} 

ответ

4

В отличие от Ext JS 3, Ext JS 4 не расширяет родной объект Date. Вместо этого он предоставляет Ext.Date. Таким образом, вместо:

date.format('m/d/Y'); 

вы бы вместо этого использовать:

Ext.Date.format(date, 'm/d/Y'); 

Кроме того, используя Eval() действительно плохая идея, большую часть времени. Этот код не является исключением.

И если вы откажетесь от eval, попытка try-catch также не понадобится.

И, наконец, функция, которая анализирует дату и преобразует ее в другой формат, кажется, делает слишком много. Часто вам нужно отображать одну и ту же дату в разных форматах в разных частях приложения. Поэтому я хотел бы просто иметь функцию, которая анализирует формат даты WCF в объекте JavaScript Data. А затем используйте преобразование объекта Date в конкретный строковый формат в том месте, где это необходимо.

Удаление всех посторонние вещей, это то, что я получаю:

function parseWcfDate(dt) { 
    var milliseconds = dt.replace(/\/Date\((-?[0-9]+)([+-][0-9]+)?\)\//, "$1"); 
    return new Date(parseInt(milliseconds, 10)); 
} 

Во всяком случае, все это слишком много хлопот ... Ext JS имеет встроенную поддержку для синтаксического анализа WCF отформатированных дат:

Ext.Date.parse("/Date(1234567894560)/", "MS"); 

Также смотрите:

0

Использование JSON.NET с JavaScriptDateConverter.