如何用Moment.js判断聊天消息创建时间差是否超过15分钟?
解决Moment.js计算消息时间差的问题
嘿,我一眼就瞅到问题所在啦——你现在把Moment处理后的时间直接转成了格式化字符串,这就把Moment对象的时间计算能力给丢啦!格式化后的字符串只是纯文本,根本没法用来算时间差,得先保留Moment实例才行。
下面是正确的处理思路和代码:
先保留Moment对象,别急着格式化
先把UTC时间转成本地时间的Moment实例存起来,不要马上调用.format(),这样才能用Moment自带的时间计算方法。用
.diff()方法计算分钟差
Moment.js的.diff()方法专门用来算两个时间的差值,你只需要指定单位为'minutes',就能直接拿到分钟数差。判断差值并设置flag
拿到分钟差之后,直接判断是否大于15就行啦。
具体代码示例:
// 获取两个消息的Moment实例(不做格式化) const currentMsgMoment = moment.utc(conversationMessages[this.index].createdDate).local(); const prevMsgMoment = moment.utc(conversationMessages[this.index - 1].createdDate).local(); // 计算两个时间的分钟差(结果为正数表示当前消息比上一条晚) const minutesDifference = currentMsgMoment.diff(prevMsgMoment, 'minutes'); // 根据差值设置flag const flag = minutesDifference > 15;
额外小贴士
- 如果你的消息列表有可能出现顺序错乱(比如上一条消息的时间比当前的还晚),可以用
Math.abs(minutesDifference) > 15取绝对值判断,确保不管时间顺序如何都能正确识别超过15分钟的情况。 - 等你需要在界面上显示时间的时候,再对Moment实例调用
.format("D/MM/YYYY HH:mm:ss")就好,别提前格式化浪费了Moment的功能~
内容的提问来源于stack exchange,提问作者drahil




