【问题标题】:How to transform multiple dates into a JSON object into custom formatted dates using moment.js?如何使用 moment.js 将多个日期转换为 JSON 对象到自定义格式的日期?
【发布时间】:2019-02-09 12:29:28
【问题描述】:

我有一个 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')
  • 为什么要使用时刻? DatesItemResponse.date.substr(5,5) 为我做这件事(而且代码更少)。 ;-)

标签: javascript json reactjs date momentjs


【解决方案1】:

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

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 属性,然后在具有所需格式的那些时刻对象上调用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>

【讨论】:

  • 我从 API 获取日期对象作为 ajax 响应,因此我无法使用 JSON.parse()。你有解决方法吗?
  • @OliverJuhl 你能用那个 AJAX 调用的代码更新你的问题吗?
  • 如果响应已经被解析,你可能只需要做moment(response.date).format('MM-DD')moment(response.data.date).format('MM-DD'),而不使用JSON.parse
  • @OliverJuhl 看看更新的答案。基本上,如果您在该响应对象中嵌套了多个日期,则需要遍历所有日期并创建多个时刻对象(每个日期一个)来解析它们。
  • 非常感谢@Danziger
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2015-04-28
  • 2021-01-06
  • 2017-10-12
  • 1970-01-01
相关资源
最近更新 更多