一篇帖子的留言1分钟内显示 多少秒前
1小时内显示 多少分钟前
1天内  显示 多少小时前
1个月内显示 多少天前本人只能用最简单的判断来实现$posttime = "2011-07-19 23:00:00";//发帖时间$unix_time = strtotime($posttime);if (60 > $unix_time) {
    //多少秒前
} else if (3600 > $unix_time) {
    //多少分钟前
}......有没有更简单和高效的写法啊??

解决方案 »

  1.   

    当前时间-发帖时间
    switch 判断这样OK?
      

  2.   

    UCHome 里面是这么做的:if($time > 24*3600) {
        $result = gmdate($dateformat, $timestamp + $timeoffset * 3600);
    } elseif ($time > 3600) {
        $result = intval($time/3600).lang('hour').lang('before');
    } elseif ($time > 60) {
        $result = intval($time/60).lang('minute').lang('before');
    } elseif ($time > 0) {
        $result = $time.lang('second').lang('before');
    } else {
        $result = lang('now');
    }也就这样了,还能咋高效啊,hehe
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  3.   

    首先, 据我所知, PHP中没有直接实现这个功能的函数...那么, 就需要动手自己实现...
    另外, 即便PHP中有这个功能的函数, 它也是一步一步解析的, 该走的路, 无论怎样都是要走的...下面是刚写的一个实现...<?php
    function time_display($time, $now) {
    $seconds = $now - $time;
    $suffix = ($seconds >= 0) ? '前' : '后';
    $seconds = abs($seconds);
    $days = floor($seconds / 86400);
    if($days > 30) return date('Y-m-d H:i:s', $now);
    else if($days) return $days . '天' . $suffix;
    else if($hours = floor($seconds / 3600)) return $hours . '小时' . $suffix;
    else if($minutes = floor($seconds / 60)) return $minutes . '分钟' . $suffix;
    else if($seconds) return $seconds . '秒' . $suffix;
    else return '刚才';
    }
    $now = time();
    #35天5小时18分钟32秒前
    echo time_display($now, $now - (35 * 24 * 60 * 60 + 5 * 60 * 60 + 18 * 60 + 32)) . chr(10);
    #21天5小时18分钟32秒前
    echo time_display($now, $now - (21 * 24 * 60 * 60 + 5 * 60 * 60 + 18 * 60 + 32)) . chr(10);
    #5小时18分钟32秒前
    echo time_display($now, $now - (5 * 60 * 60 + 18 * 60 + 32)) . chr(10);
    #18分钟32秒前
    echo time_display($now, $now - (18 * 60 + 32)) . chr(10);
    #32秒前
    echo time_display($now, $now - (32)) . chr(10);
    #刚发表完
    echo time_display($now + 0, $now) . chr(10);
    #32秒后
    echo time_display($now, $now + 32) . chr(10);
    #18分钟32秒后
    echo time_display($now, $now + 18 * 60 + 32) . chr(10);
    #5小时18分钟32秒后
    echo time_display($now, $now + 5 * 60 * 60 + 18 * 60 + 32) . chr(10);
    #21天5小时18分钟32秒后
    echo time_display($now, $now + 21 * 24 * 60 * 60 + 5 * 60 * 60 + 18 * 60 + 32) . chr(10);
    #35天5小时18分钟32秒后
    echo time_display($now, $now + 35 * 24 * 60 * 60 + 5 * 60 * 60 + 18 * 60 + 32) . chr(10);
    #下面是输出
    /*
    2011-06-14 18:30:38
    21天后
    5小时后
    18分钟后
    32秒后
    刚才
    32秒前
    18分钟前
    5小时前
    21天前
    2011-08-24 05:07:42
    */