javascript - 使用 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 )
}
最好的,
~弥敦道。
解决方案
也许来自 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>
推荐阅读
- dpdk - collectd 中的 dpdkstats 插件
- c# - 如何在 .NET 核心中的设备中在一个时间跨度内只缓存一次内容?
- java - 银行数据库:正确定义关系?
- django - 搜索功能上的 Pagiantor
- javascript - 反应原生视频全屏控制
- arrays - 为什么我会收到错误“‘等级’中缺少大小。当行显然不需要声明时?
- c++ - Guaranteed locales on different platforms
- java - Sun PKCS11 库 C_Encrypt 和 C_Decrypt 更改
- sql - SQL 每周创建列(循环?)
- android - 如何从服务器 url 在底部导航视图中设置用户个人资料图像