java 时间 分组,按时间分组消息的算法

您可以通过准备与今天日期相关的日期来更好地准备地面:

将当前日期截断为午夜

获取昨天的日期

获取上周一的日期

然后将消息日期与这3个日期中的每一个进行比较:消息日期之前或之前的第一个日期确定消息的类别 . 如果所有三个都大于消息日期,则不需要发生任何事情 .

以下是建议的代码:

// This sample uses a fixed date so the categories can be illustrated better:

var currentDate = new Date('2017/04/27') // Or leave out the argument for actual date

currentDate.setHours(0,0,0,0); // set to midnight

// Prepare all related dates: yesterday and last Monday

var keys = [];

keys.push(['Today', new Date(currentDate)]); // clone

currentDate.setDate(currentDate.getDate() - 1);

keys.push(['Yesterday', new Date(currentDate)]); // clone

currentDate.setDate(currentDate.getDate() - (currentDate.getDay()+6)%7);

keys.push(['This week', new Date(currentDate)]); // clone

var messages = [

{ date: '2017-04-21' },

{ date: '2017-04-22' },

{ date: '2017-04-23' },

{ date: '2017-04-24' }, // Monday

{ date: '2017-04-25' },

{ date: '2017-04-26' },

{ date: '2017-04-27' },

];

var messageTypeList = {

Today: [],

Yesterday: [],

"This week": []

};

messages.forEach( message => {

var date = message.date.substring(0, 10).replace(/-/g, '\/');

var messageDate = new Date(date);

var [key] = keys.find( ([key, date]) => messageDate >= date ) || [];

if (key) messageTypeList[key].push(message);

});

console.log(messageTypeList);

.as-console-wrapper { max-height: 100% !important; top: 0; }

输出:

{

"Today": [

{

"date": "2017-04-27"

}

],

"Yesterday": [

{

"date": "2017-04-26"

}

],

"This week": [

{

"date": "2017-04-24"

},

{

"date": "2017-04-25"

}

]

}

这种工作方式(使用 setHours 和 setDate )将很好地处理由于夏令时开关更短/更长的时区和天数,只要您将字符串传递到本地时区的 Date() 即可 . 因此,他们不应指定不同的时区(例如,没有 Z 或没有 YYYY-MM-DD 表示法) .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值