2013-05-11 1 views
1

Я получаю массив объектов JSON от моего MVC-контроллера, и у объектов есть пара полей даты, которые я должен был анализировать и форматировать.Moment JS Parse Whole JSON Array и Format Несколько экземпляров даты

Я заменил по умолчанию MVC JSON serialiser в с отличной Newtonsoft.Json библиотеки, поэтому мои даты уже довольно отформатированный и вернуться, как это:

"SystemDate": "2013-05-06T17:19:40.443", 
"LocalDate": "2013-05-06T18:19:40", 

Я использую Moment.js на клиентскую сторону для обработки даты, и я искал четкое решение для дальнейшего форматирования этих дат для отображения в пользовательском интерфейсе.

Я собирался начать писать пользовательскую функцию, которая будет принимать массив JSON объектов с датами для форматирования, а также шаблон даты и массив имен полей для форматирования.

Функция подписи будет выглядеть примерно так:

function formatDates(dataArray, pattern, fields) { /code/ }; 

DataArray будет что-то вроде:

[{"name": Jammer, 
    "SystemDate": "2013-05-06T17:19:40.443", 
    "LocalDate": "2013-05-06T18:19:40" 
}, 
{another object} 
{another object} 
{another object} 
] 

узор будет что-то вроде:

"dddd, MMMM Do YYYY, h:mm:ss a" 

Список полей будет (используя вышеупомянутый пример объекта):

[{"SystemDate"}, {"LocalDate"}] 

Я только начал использовать Moment.js, так что я не особо знаком с это собственный API, но из looking at the docs нет ничего предлагая такую ​​функциональность уже существующих в это кодовая.

Прежде чем я уйду от орудия, мне было интересно, есть ли что-то уже в Moment.js, которое будет обрабатывать это для меня? Или любые указатели на то, как наилучшим образом реализовать эту функциональность?

ответ

0

Это не та вещь, которую я ожидал бы от библиотеки манипулирования датами. Это действительно зависит от вас, чтобы расшифровать ваши данные, выполнить итерацию, чтобы найти даты, а затем использовать моменты, чтобы сделать дату foramtting, и, наконец, вы перекодируете свои данные обратно в форму, которая вам нужна. Тем не менее, глядя на то, что вы хотите, кажется, очень тривиальная задача.

Что-то, как это должно сделать это для вас

JavaScript

var jsonString = '[{"name":"Jammer0","SystemDate":"2013-05-06T17:19:40.443","LocalDate":"2013-05-06T18:19:40"},{"name":"Jammer1","SystemDate":"2013-05-06T17:19:40.443","LocalDate":"2013-05-06T18:19:40"},{"name":"Jammer2","SystemDate":"2013-05-06T17:19:40.443","LocalDate":"2013-05-06T18:19:40"},{"name":"Jammer3","SystemDate":"2013-05-06T17:19:40.443","LocalDate":"2013-05-06T18:19:40"}]'; 

var formatted = JSON.stringify(JSON.parse(jsonString).map(function (record) { 
    var requiredPattern = "dddd, MMMM Do YYYY, h:mm:ss a"; 

    record.SystemDate = moment(record.SystemDate).format(requiredPattern); 
    record.LocalDate = moment(record.LocalDate).format(requiredPattern); 

    return record; 
})); 

console.log(formatted); 

jsfiddle На

+0

jsfiddle например, как представляется, не работает в данный момент. – Jammer

+0

Я попытался добавить это в свой код, и он генерирует ошибку сценария «SyntaxError: JSON.parse: неожиданный символ» – Jammer

+0

jsFiddle действительно сломан. Он не будет работать нормально даже с moment.min.js, на который ссылается как внешний ресурс. – Jammer