聊天IM的時間戳顯示規則


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

以下規則是在體驗微信操作后,推測出來的規則,可能存在一些不准確的表述

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

 

參考基准

當處於正在聊天時,聊天內容比聊天時間更為重要,盡量避免時間和發送狀態對聊天內容的干擾,簡化界面,僅保留最核心的信息:發送者、發送內容。

 

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條);

在點擊刪除時,一次性進行刪除操作,避免遍歷影響性能。

示例截圖如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM