【问题标题】:"Time ago" from MySQL timestampMySQL时间戳中的“Time ago”
【发布时间】:2012-02-09 20:11:28
【问题描述】:

我正在尝试制作一个结果表,其中包括数据库中每个条目的时间戳。但是,我需要将时间显示为“X 秒/分钟/小时前”

我尝试了jQuery timeago plugin,但成功率为零,现在想知道如何为每个条目执行此操作。

$result = mysql_query("SELECT * from realmfeed order by ID asc");

echo "<table class='display'>\n";

while($row = mysql_fetch_array($result))
{
    echo "<tr><td><b>".$row['ID']."</b></td>\n";
    echo "<td>".$row['eventType']."</td>\n";
    echo "<td>".$row['server']."</td>\n";
    echo "<td>".$row['realm']."</td>\n";
    echo "<td>".$row['name']."</td>\n";
    echo "<td>".$row['time']."</td>\n</tr>\n\n";
}


echo "</table>\n";

如何为每个结果创建一个“时间前”函数?

【问题讨论】:

  • 你用什么类型来存储时间的?
  • 存储为 YYYY-MM-DD HH:MM:SS
  • 我会修改查询以使用从戳记到现在的 diff() 函数,并将其显示在页面上。无需涉及任何客户端的东西。
  • @Dagon 我没有指定 DATEDIFF() 的原因是我相信这只会返回几天。他可能必须创建一个 UDF 才能使其工作。转换为 unix_timestamp 等。
  • 对 SO 的快速搜索得到了这样的结果:stackoverflow.com/questions/5279079/…

标签: php jquery mysql timeago


【解决方案1】:
$time = strtotime($row['time']);
$dbDate = new DateTime($time);
$currDate = new DateTime();
$interval = $currDate->diff($dbDate);
echo $interval->d." days ".$interval->h." hours";

可用功能和字段请参考DateInterval

【讨论】:

    【解决方案2】:

    使用 PHP 进行时差计算的问题是您假设 MySQL 和 PHP 服务器位于相同的时区。最好在 SELECT 中进行差异计算:

    SELECT TIMEDIFF(NOW(), `time`) AS ago FROM realmfeed ORDER BY ID ASC

    这将返回hh:mm:ss 格式化的时差。

    或者,如果您只喜欢秒数:

    SELECT TIME_TO_SEC(TIMEDIFF(NOW(), `time`)) AS secondsAgo FROM realmfeed ORDER BY ID ASC

    【讨论】:

      【解决方案3】:

      我会从 MYSQL 获取时间戳,然后在 php 中进行数学运算,例如。

      $result = mysql_query("SELECT ..., UNIX_TIMESTAMP(time) as time FROM realfeed ORDER BY ID ASC");
      
      
      $row = mysql_fetch_array($result);
      $then = $row['time'];
      $now = time();
      
      $diff = $now - $then; //Now you have the difference in seconds
      

      这里有一个不错的功能,尽管我自己没有检查过,但您可以使用差异.....

      http://itwigle.com/twig/PHP_Time_Ago_Function

      【讨论】:

        【解决方案4】:

        试试这个可能会有帮助

        <html>
        <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script src="jquery.timeago.js"></script>
        </head>
        
        <body>
        <?php 
        $result = mysql_query("SELECT * from realmfeed order by ID asc");
        
        echo "<table class='display'>\n";
        
        while($row = mysql_fetch_array($result))
        {
            echo "<tr><td><b>".$row['ID']."</b></td>\n";
            echo "<td>".$row['eventType']."</td>\n";
            echo "<td>".$row['server']."</td>\n";
            echo "<td>".$row['realm']."</td>\n";
            echo "<td>".$row['name']."</td>\n";
            echo "<td><abbr class=\"timeago\" title=\"".date("j F Y h:i:s A",$row['time'])."\"></abbr></td>\n</tr>\n\n";
        }
        
        
        echo "</table>\n";
        ?>
        
            <script>
            jQuery(document).ready(function($){
             $("abbr.timeago").timeago()
        
            });
            </script>
        
        </body>
        </html>
        

        【讨论】:

        • 在PHP或Mysql中在服务器端进行时间转换可能会更好。
        • 我认为这个答案是最好的,因为它提供了在客户端而不是服务器端控制时间操作的能力。在服务器端做的时候,给出了冗余信息,这样的信息在客户端可以很方便的计算出来,再加上服务器和客户端之间的这种DISPLAY信息的分离,维护起来更容易,不需要改变服务器端。
        猜你喜欢
        • 2018-10-19
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 2011-04-12
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多