Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊天IM的时间戳显示规则

聊天IM的时间戳显示规则

作者头像
meteoric
发布于 2018-11-19 10:29:31
发布于 2018-11-19 10:29:31
4.9K0
举报
文章被收录于专栏:游戏杂谈游戏杂谈

======================================================

以下规则是在体验微信操作后,推测出来的规则,可能存在一些不准确的表述

======================================================

参考基准

当处于正在聊天时,聊天内容比聊天时间更为重要,尽量避免时间和发送状态对聊天内容的干扰,简化界面,仅保留最核心的信息:发送者、发送内容。

Badge(未读消息数量)

当消息数量达到三位数时(也即消息数量 > 99),显示…而非数字,缓解/减轻强迫症患者的心理压力

时间戳显示

时间戳由客户端自行处理,时间戳的显示根据不同的场景进行显示,可参考下面几种典型的使用场景,但无论怎么显示,消息之间超过5分钟都需要显示时间戳了。

###点击聊天列表,进入聊天详情时(单聊或群聊)

1)获取数据

获取最近最多20条数据(20条为一页数据,超过20条时只取最近的20条,少于20条时有多少取多少)

2)显示数据

获取第一条消息的接收时间,然后将这个时间戳插入到界面并记录下来(假设使用变量lastShowTimeStamp进行记录),然后将消息按时间戳(从小到大排序,老消息在前新消息在后),追加到界面中,但需要注意时间戳的显示规则。

循环遍历每条消息时,需要判断该消息的接收时间与最后一次显示时间戳的时间间隔,当大于5分钟(300ms)时则再追加一条时间戳,同时更新lastShowTimeStamp的值。

###时间戳的显示规则

一天内的消息显示为:“昨天 时:分”

二天至七天内显示为:“星期X 时:分”

当大于7天时显示为:“YYYY年X月X日时:分”

时、分不足二位时,前面用0补齐,月、日不足二位时不补位。如:2016年7月13日 09:22,注意计算天数是要算天,不能拿毫秒进行比较。否则昨天上午的消息,在今天下午看时将会变成“星期X 09:10”,正确的应该是“昨天 09:10”

示例截图如下:

###聊天ing

当收到新消息时,判断当前收到的消息与lastShowTimeStamp之间的间隔,大于5分钟时就显示时间戳,同时更新lastShowTimeStamp的值为当前新消息收到的时间戳。

会出现一种情况,当5分钟内,消息很频繁而导致消息量达到100条,那么这一千条数据中间是没有任何时间戳的。如果退出聊天界面再重新进入时,参考第一条规则。

示例截图:

###当向下拉取消息时

向上拉取消息时,获取向上的20条数据(一页,不足一页时有多少取多少),然后根据第一条的规则来显示。

先显示时间戳,然后判断每一条时间戳与上一次显示的时间戳进行比较,间隔大于5分钟时显示新的时间戳,唯一与第一条规则不同的是,此时不要更新lastShowTimeStamp的值。因为lastShowTimeStamp的值是用来判断新消息的,老消息需要判断的话使用一个临时变量记录即可,拉取并显示完一页数据就丢弃掉了。

会出现一种情况,就是向上拉取消息时,你会遇到同一分钟内发送的消息各有一个时间戳,而且时间戳是相同的。出现的原因是消息分属在二页内了

示例截图如下:

###删除单条消息时

删除一条消息时,如果被删除的消息上一条是时间戳,而下一条不是一条消息记录时就将时间戳一并删除掉。

这样会导致一种情况,时间戳被删除掉之后,lastShowTimeStamp并没有进行更新,如果此时再接收到新消息时,它不会再显示时间戳,直到新消息超过5分钟的间隔才重新显示时间戳并更新lastShowTimeStamp的值。删除完消息后检查当前消息数,少于一页时自动再加载上一页数据,直至没有消息可供加载。

示例截图如下(第一张图是正常的,第二张图是非正常的,退出聊天重新进入或等5分钟之后便可恢复正常):

###批量删除消息时

规则与单删类似,唯一的不同的,当选中某一行时需要向上、向下遍历。

向上遍历时:

如果上一条消息是未选中状态,中止向上查找;

如果上一条消息是选中状态,继续向上不断查找,直到找到未选中消息(中止)、找到时间戳(记录下该时间戳的位置,然后向下遍历);

向下遍历时:

如果下一条消息是未选中状态,记录的时间戳位置清除,中止向下查找;

如果下一条消息是选中状态,继续向下不断查找,直到找到未选中消息(中止并清除)、找到时间戳(成功找到,也就是向前是一个时间戳,向后也是一个时间戳或是最后一条消息也记录向上查找到的时间戳)

注:批量删除时,一次最多能选择删除100条数据。消息删除后,需要判断当前消息数量是否够一页(20条),不够就再向上加载一页数据(20条);

在点击删除时,一次性进行删除操作,避免遍历影响性能。

示例截图如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
偏移分页 vs 滚动分页
最近在学习分页技术,发现偏移分页和滚动分页是两种完全不同的思路。记录一下我的理解和思考。
Eulogy
2025/05/25
640
快速了解区块链背后的三项基本技术
作者 Thijs Maas 编译 Mika 本文为 CDA 数据分析师原创作品,转载需授权 如果问十个人"什么是区块链技术?",你可能会得到十种不同的答案。理解区块链的最佳方法是逐步了解当中的基本
CDA数据分析师
2018/03/26
9080
快速了解区块链背后的三项基本技术
百亿级数据 分库分表 后怎么分页查询?
随着数据的日益增多,在架构上不得不分库分表,提高系统的读写速度,但是这种架构带来的问题也是很多,这篇文章就来讲一讲跨库/表分页查询的解决方案。
码猿技术专栏
2023/05/01
2.5K0
百亿级数据 分库分表 后怎么分页查询?
一个小故事,看懂MySQL索引原理!
“老板你好,我叫小M,不是叫 007 ,007 是我对公司的热爱,是我的毕生....”
轩辕之风
2021/04/21
3680
一个小故事,看懂MySQL索引原理!
1w+ 字深入解读 Flink SQL 实现流处理的核心技术!
本文摘编于《Flink SQL 与 DataStream 入门、进阶与实战》,作者羊艺超,经出版方授权发布,转载请标明文章出处。
公众号:大数据羊说
2024/01/08
1.3K0
1w+ 字深入解读 Flink SQL 实现流处理的核心技术!
开源IM聊天程序HarmonyChat:基于鸿蒙NEXT的WebSocket协议
HarmonyChat是一个简洁的鸿蒙NEXT上的基于WebSocket协议的聊天客户端 ,它基于MobileIMSDK通信库, 有完善的网络通信通力、简洁的聊天界面UI、合理的代码拆分和逻辑实现,非常适合学习研究或直接用于简单的鸿蒙NEXT单页聊天项目中 。
JackJiang
2025/01/02
1770
开源IM聊天程序HarmonyChat:基于鸿蒙NEXT的WebSocket协议
老弟想自己做个微信,被我一个问题劝退了。。
大家好,我是程序员鱼皮。最近老弟小阿巴放暑假,想找点事情做,于是就来问我:老鲏,我想做个练手项目,有没有什么好的建议?
程序员鱼皮
2024/08/09
1670
老弟想自己做个微信,被我一个问题劝退了。。
将根据时间戳增量数据方案修改为根据批次号增量数据方案
1、之前写过根据时间戳来增量数据,时间戳增量数据存在一定的缺点,就是如果开启自动的话,以后如果因为某个外在因素出错了,那么这个开始时间和结束时间不好控制,那么就可能造成一些其他数据量不准的情况,但是根据批次号不会出现这个问题:
别先生
2018/12/21
1.3K0
微服务设计原则——高性能
对于查询 API 来说,当查询结果集包含成千上万条记录时,返回所有结果是一个挑战,它给服务器、客户端和网络带来了不必要的压力,于是便有了分页接口。
恋喵大鲤鱼
2024/08/25
1260
回龙观大叔狂磕mysql(第二回)
同学, 还记得上一回说的回龙观大叔面试的故事嘛? 回龙观大叔狂磕mysql(第一回) 经过上一回合的学习, 这位大叔终于找回了点自信, 这次又投了几家公司, 不过现在还没有公司去联系他. 大叔的电脑桌
用户2825413
2021/04/08
5680
回龙观大叔狂磕mysql(第二回)
JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)
    在开发过程中,经常做的一件事,也是最基本的事,就是从数据库中查询数据,然后在客户端显示出来。当数据少时,可以在一个页面内显示完成。然而,如果查询记录是几百条、上千条呢?直接一个页面显示完全的话,表格得多长啊。。。。。。这时,我们可以用分页技术。
Twcat_tree
2022/11/30
3.5K0
JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)
sql server时间戳timestamp
SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法。每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1。这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系。
_一级菜鸟
2024/05/09
4990
sql server时间戳timestamp
mysql分页读取数据重复问题
服务端开发过程中,我们通常需要与mysql数据库进行数据交互。在大多数情况下,由于数据量过大、网络时延、mysql参数配置限制,以及业务逻辑的限制等,需要我们对所需的数据进行分页读取。尤其是需要读取的数据量过大时,我们经常会遇到下面这种错误类型。
闻说社
2024/12/02
3640
mysql分页读取数据重复问题
JavaWeb16-案例分页实现(Java真正的全栈开发)
案例 & 分页 一.案例 1. 删除选中分析 商品列表页面如下: 要求: 1.在表头上添加一个复选框.(列表全选或者全不选) 2.在list.jsp中添加一个删除选中的按钮,点击删除选中商品 2. 删除选中实现 全选或者全不选的实现 在表头上添加一个复选框 遍历商品的时候给每一个商品添加一个复选框,为了便于获取,给他们使用了name属性 编写js函数实现全选或者全不选 删除选中记录的实现 获取选中的记录,将选中的ids传递给DeleteProductByIdsServlet 为了方便获取
Java帮帮
2018/03/19
3.6K0
JavaWeb16-案例分页实现(Java真正的全栈开发)
jsp实现分页显示记录
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/17486569
DannyHoo
2018/09/13
5.1K0
jsp实现分页显示记录
Web端即时聊天项目实现(基于WebSocket)
 其实这个项目算是我做过的花时间最长也投入心血最多的一个项目了,当时决定开始做这个的时候我几乎什么都不会,那时我个人的情况是:
全栈程序员站长
2022/08/27
3K0
IM开发干货分享:如何优雅的实现大量离线消息的可靠投递
IM聊天消息能保证可靠送达,对于用户来说,就好比把钱存在银行不怕被偷一样,是信任的问题。试想,如果用户能明显感知到聊天消息无法保证送达,谁还愿意来用你的APP?谁也不希望自已的话就像浮云一样随风飘逝。
JackJiang
2020/07/21
1.7K0
IM开发技术分享:浅谈IM系统中离线消息、历史消息的最佳实践
在如今的移动互联网时代,IM类产品已是我们生活中不可或缺的组成部分。像微信、钉钉、QQ等是典型的以 IM 为核心功能的社交产品。另外也有一些应用虽然IM功能不是核心,但IM能力也是其整个应用极其重要的组成部分,比如在线游戏、电商直播等应用。
JackJiang
2022/04/19
2.8K1
IM开发技术分享:浅谈IM系统中离线消息、历史消息的最佳实践
journalctl命令
journalctl命令是Systemd日志系统的一个命令,主要用途是用来查看通过Systemd日志系统记录的日志,在Systemd出现之前,Linux系统及各应用的日志都是分别管理的,Systemd取代了initd之后便开始统一管理了所有Unit的启动日志,可以只用一个journalctl命令,查看所有内核和应用的日志。
WindRunnerMax
2021/02/25
3.8K0
仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]
即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求,现在都讲究用户体验,所以时间显示再也不能像传统软件一样简单粗地暴显示成“年/月/日 时:分:秒”这样。所以,市面上几乎所有的IM都会对聊天消息的时间显示格化做人性化处理,从而提升用户体验(使用感受会明显友好)。
JackJiang
2019/02/23
4.6K0
相关推荐
偏移分页 vs 滚动分页
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档