聊天时间戳类似iMessage

Chat Timestamp Like iMessage

本文关键字:iMessage 时间戳 聊天      更新时间:2023-09-26

如果传入/传出消息发生在与前一条消息相同的5分钟内,我该如何不显示它们的消息时间戳。iMessage是如何做到的。我现在已经将其设置为每条消息都有时间戳,但很难弄清楚如何限制它们。我该如何设置某种过滤器?

MySQL

$query = "SELECT *
FROM messages A
JOIN profiles B ON
B.user = A.auth
JOIN lastmessage C ON
B.user = C.user
WHERE A.recip ='$view'
ORDER BY A.time DESC
";

PHP

    $result = queryMysql($query);
    $num    = $result->num_rows;
    $delayInSeconds = 300; // 5 minutes
    for ($j = 0 ; $j < $num ; ++$j)
    {
      if ($row['time'] >= strtotime("today") && $row['lastMessageTime'] < $row['time'] - $delayInSeconds)
    echo "<strong>Today</strong>" . date(' g:i A', $row['time']);
     $row['lastMessageTime'] = $row['time'];
  if ($row['time'] >= strtotime("yesterday") && $row['lastMessageTime'] < $row['time'] - $delayInSeconds)
    echo  "<strong>Yesterday</strong>". date(' g:i A', $row['time']);
    $row['lastMessageTime'] = $row['time'];
  if ($row['time'] >= strtotime("yesterday + 3,601") && $row['lastMessageTime'] < $row['time'] - $delayInSeconds)
    echo date('D, M d, g:i A', $row['time']);
    $row['lastMessageTime'] = $row['time'];

假设您正在循环处理消息?

只需跟踪上一次打印的时间戳的变量,如果时间超过5分钟,则只显示当前消息时间。

例如类似(伪)的东西

$lastMessageTime = 0; // epoch
$delayInSeconds = 300; // 5 minutes
foreach($messages as $message)
{
    //Print message (with whatever formatting  you want)
    echo $message->message;
    // Print time, if last time displayed was over 5 minutes ago
    if($lastMessageTime < $message->time - $delayInSeconds)
    {
        //More than 5 minutes ago, print time
        echo date('D, M d, g:i A', $message->time);
        $lastMessageTime = $messsage->time;
    }
}

我从未使用过iMessage,但你似乎在寻找这样的东西(伪代码):

$last_timestamp = '';
foreach(...){
  if($last_timestamp !== $this_timestamp){
    echo $this_timestamp;
    $last_timestamp = $this_timestamp;
  }
}

这样,只要时间戳与前一个时间戳不同,就只能打印时间戳。

编辑:要每5分钟进行一轮,您也可以这样做:

  if($last_timestamp < $this_timestamp - 5 minutes)