Как преобразовать несколько дат в объект JSON в настраиваемые даты с помощью moment.js? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть объект JSON, полученный из запроса AJAX, представленный интерфейсом SuccesResponse

interface SuccessResponse {
    dates: Dates;
}

Где:

interface Dates {
    items: DatesItemResponse[];
}

interface DatesItemResponse {
    date: string;
}

A DatesItemResponse выглядит так:

{
    "date": "2018-06-25T00:00:00"
}

Мне нужно отформатировать все эти даты, используя moment.js как MM-DD, поэтому в приведенном выше примере это должно быть 06-25, но я не знаю, как заставить moment.js анализировать все даты вместо один.

1 Ответ

0 голосов
/ 04 сентября 2018

В соответствии с интерфейсами, которые вы упомянули, ваш ответ выглядит примерно так:

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.log(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.log(response);
<script src="http://momentjs.com/downloads/moment.min.js"></script>
...