如何使用moment.js将多个日期转换为JSON对象并转换为自定义格式的日期?

时间:2018-09-04 12:54:24

标签: javascript json reactjs date momentjs

我有一个来自AJAX请求的JSON对象,由接口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,但是我不知道如何制作{{1} }解析所有日期,而不是单个日期。

1 个答案:

答案 0 :(得分:2)

根据您提到的界面,您的响应如下所示:

const response = {
    dates: {
        items: [{
            date: '2018-06-25T00:00:00'
        }, {
            date: '2018-06-26T00:00:00'
        }, {
            date: '2018-06-27T00:00:00'
        }]
    }
};

因此,您需要遍历items并通过creating a moment object with each date string解析其中的所有date属性,然后在具有所需格式的那些矩对象上调用formatMM-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>