首页 > 解决方案 > 使用 moment.js 按日期对数组进行分类

问题描述

我正在尝试按日期对数组项进行分组。数组列表如下所示:

{
    title: 'title 01',
    timestamp: 1574082000000
},
{
    title: 'title 02',
    timestamp: 1574071200000
},
{
    title: 'title 03',
    timestamp: 1573974000000
},
.
.
.

输出应该是这样的:

2019 年 11 月 19 日(或今天)

标题 01

标题 02

2019 年 11 月 18 日

标题 03

上周

标题 04

九月

标题 ...

坦率地说,我不能做太多,但我设法使用以下代码以所需格式获取周名称:

for ( let i = 0; i < transactions.length; i++ ) {
    let timestamps = moment( transactions[i].timestamp ).startOf('week')._d
    let weeklyTime = moment( timestamps ).format( 'Do MMMM, YYYY' )

    console.log( weeklyTime )
}

最好的,

~弥敦道。

标签: javascriptarraysjsonmomentjs

解决方案


也许来自 moment.js 的“相对时间”是您正在寻找的? .fromNow()方法给你一个很好的相对日期。

var transactions=[{
    title: 'title 01',
    timestamp: moment().subtract(2, 'hours') //create test date for 2 days ago
},
{
    title: 'title 02',
    timestamp: moment().subtract(2, 'hours') //create test date for 2 days ago
},
{
    title: 'title 03',
    timestamp: moment().subtract(1, 'days') //create test date for yesterday
},
{
    title: 'title 04',
    timestamp: moment().subtract(7, 'days') //create test date for last week
},
{
    title: 'title 05',
    timestamp: moment().subtract(70, 'days') //create test date for 2 months ago
}]

var transactionsSortedWithRelativeTime = transactions.sort((t1, t2) => t1.valueOf()-t2.valueOf()).map(t => ({...t, when:moment(t.timestamp).fromNow()}));

(new Set(transactionsSortedWithRelativeTime.map(t => t.when))).forEach(when => {
	console.log(when + ': ');
	transactionsSortedWithRelativeTime.filter(t => t.when == when).forEach(t => console.log('   ' + t.title))
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>


推荐阅读