Как преобразовать несколько дат в объект JSON в даты в настраиваемом формате с помощью moment.js?

У меня есть объект 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 анализировать все даты вместо одной.

moment(obj.date).format('MM-DD')
Andrew Li 04.09.2018 14:55

Зачем использовать момент? DatesItemResponse.date.substr(5,5) делает это за меня (и это меньше кода). ;-)

RobG 05.09.2018 00:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
324
1

Ответы 1

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

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 (). У вас есть обходной путь?

Oliver Juhl 04.09.2018 15:18

@OliverJuhl Не могли бы вы обновить свой вопрос кодом этого вызова AJAX?

Danziger 04.09.2018 15:24

Если ответ уже был проанализирован, вам может потребоваться выполнить moment(response.date).format('MM-DD') или moment(response.data.date).format('MM-DD') без использования JSON.parse.

Danziger 04.09.2018 15:25

Я обновил свой вопрос ответом об успешном запросе ajax.

Oliver Juhl 04.09.2018 15:29

По какой-то причине я не могу получить реквизиты объектов, которые находятся в объекте JSON.

Oliver Juhl 04.09.2018 15:30

@OliverJuhl Взгляните на обновленный ответ. По сути, если у вас есть несколько дат, вложенных в этот объект ответа, вам нужно перебрать их все и создать несколько объектов моментов (по одному для каждой даты), чтобы проанализировать их все.

Danziger 04.09.2018 15:37

Большое спасибо @Danziger

Oliver Juhl 04.09.2018 15:44

Другие вопросы по теме