У меня есть объект JSON, который поступает из запроса AJAX, представленного интерфейсом SuccesResponse
interface SuccessResponse {
dates: Dates;
}
Где:
interface Dates {
items: DatesItemResponse[];
}
interface DatesItemResponse {
date: string;
}
DatesItemResponse
выглядит так:
{
"date": "2018-06-25T00:00:00"
}
Мне нужно отформатировать все эти даты, используя moment.js
как MM-DD
, поэтому в приведенном выше примере это должен быть 06-25
, но я не знаю, как заставить moment.js
анализировать все даты вместо одной.
Зачем использовать момент? DatesItemResponse.date.substr(5,5)
делает это за меня (и это меньше кода). ;-)
Согласно упомянутым интерфейсам ваш ответ выглядит примерно так:
const response = {
dates: {
items: [{
date: '2018-06-25T00:00:00'
}, {
date: '2018-06-26T00:00:00'
}, {
date: '2018-06-27T00:00:00'
}]
}
};
Следовательно, вам нужно перебрать items
и проанализировать все свойства date
в нем с помощью создание объекта момента с каждой строкой даты, а затем вызвать format
для тех объектов момента с желаемым форматом, в данном случае MM-DD
.
Если вы хотите получить все даты в одном массиве, вы можете использовать Array.prototype.map()
и сделать что-то вроде этого:
const response = {
dates: {
items: [{
date: '2018-06-25T00:00:00'
}, {
date: '2018-06-26T00:00:00'
}, {
date: '2018-06-27T00:00:00'
}]
}
};
console.info(response.dates.items.map(item => moment(item.date).format('MM-DD')));
<script src = "http://momentjs.com/downloads/moment.min.js"></script>
Однако, если вы хотите получить тот же самый объект, который у вас был изначально, но с заменой исходных строк даты на отформатированные, тогда Array.prototype.forEach()
может быть лучшим вариантом (хотя технически map
также будет работать):
const response = {
dates: {
items: [{
date: '2018-06-25T00:00:00'
}, {
date: '2018-06-26T00:00:00'
}, {
date: '2018-06-27T00:00:00'
}]
}
};
response.dates.items.forEach(item => {
item.date = moment(item.date).format('MM-DD');
});
console.info(response);
<script src = "http://momentjs.com/downloads/moment.min.js"></script>
Я получаю объект даты как ответ ajax от API, поэтому я не могу использовать JSON.parse (). У вас есть обходной путь?
@OliverJuhl Не могли бы вы обновить свой вопрос кодом этого вызова AJAX?
Если ответ уже был проанализирован, вам может потребоваться выполнить moment(response.date).format('MM-DD')
или moment(response.data.date).format('MM-DD')
без использования JSON.parse
.
Я обновил свой вопрос ответом об успешном запросе ajax.
По какой-то причине я не могу получить реквизиты объектов, которые находятся в объекте JSON.
@OliverJuhl Взгляните на обновленный ответ. По сути, если у вас есть несколько дат, вложенных в этот объект ответа, вам нужно перебрать их все и создать несколько объектов моментов (по одному для каждой даты), чтобы проанализировать их все.
Большое спасибо @Danziger
moment(obj.date).format('MM-DD')