doupu7651 2015-07-11 11:29
浏览 47

PHP timeago友好日期不起作用

I have this function for show friendly date timeago with unix timestamp and date format:

function friendlyDate($timestamp, $formats = null)
{

    $_DATE_FORMAT = array(
            'DAY'           => 'DAY',
            'DAY_HOUR'      => 'DAY_HOUR',
            'HOUR'          => 'HOUR',
            'HOUR_MINUTE'   => 'HOUR_MINUTE',
            'MINUTE'        => 'MINUTE',
            'MINUTE_SECOND' => 'MINUTE_SECOND',
            'SECOND'        => 'SECOND',
    );

    if ($formats == null) {
        $formats = $_DATE_FORMAT;
    }

    $seconds = time() - $timestamp;
    $minutes = floor($seconds / 60);
    $hours   = floor($minutes / 60);
    $days    = floor($hours / 24);

    if ($days > 0 && $days<=3) {
        $diffFormat = 'DAY';
    } else if($days > 3){
        return date('Y-m-d',$timestamp);
    } else {
        $diffFormat = ($hours > 0) ? 'HOUR' : 'MINUTE';
        if ($diffFormat == 'HOUR') {
            $diffFormat .= ($minutes > 0 && ($minutes - $hours * 60) > 0) ? '_MINUTE' : '';
        } else {
            $diffFormat = (($seconds - $minutes * 60) > 0 && $minutes > 0)
            ? $diffFormat.'_SECOND' : 'SECOND';
        }
    }

    $dateDiff = null;
    switch ($diffFormat) {
        case 'DAY':
            $dateDiff = sprintf($formats[$diffFormat], $days);
            break;
        case 'DAY_HOUR':
            $dateDiff = sprintf($formats[$diffFormat], $days, $hours - $days * 60);
            break;
        case 'HOUR':
            $dateDiff = sprintf($formats[$diffFormat], $hours);
            break;
        case 'HOUR_MINUTE':
            $dateDiff = sprintf($formats[$diffFormat], $hours, $minutes - $hours * 60);
            break;
        case 'MINUTE':
            $dateDiff = sprintf($formats[$diffFormat], $minutes);
            break;
        case 'MINUTE_SECOND':
            $dateDiff = sprintf($formats[$diffFormat], $minutes, $seconds - $minutes * 60);
            break;
        case 'SECOND':
            $dateDiff = sprintf($formats[$diffFormat], $seconds);
            break;
    }
    return $dateDiff;
}

I echo friendlyDate in my page like this :

echo friendlyDate(1436613754,'');

But I see this result: SECOND

What can I do to fix this problem, I would like to display date and time.

  • 写回答

2条回答 默认 最新

  • douchun2158 2016-03-17 09:23
    关注

    Here is my own timeAgo() function that I use,

    function timeAgo($timestamp)
    {
        //calculate here
        //@type cast
        //@current time,
        //@difference in timestamp
    
        $timestamp      =   (int) $timestamp;
        $current_time   =   $_SERVER['REQUEST_TIME'];
        $diff           =   $current_time - $timestamp;
    
        //Intervals in seconds
        $intervals  =   array (
                'year'      => 31556926,
                'month'     => 2629744,
                'week'      => 604800,
                'day'       => 86400,
                'hour'      => 3600,
                'minute'    => 60
        );
    
        //Now we just find the difference
        if($diff == 0)
        {
            return 'just now';
        }
    
        if($diff < 60)
        {
            return $diff == 1 ? $diff.' second ago' : $diff.' seconds ago';
        }
    
        if($diff >= 60 && $diff < $intervals['hour'])
        {
            $diff   =   floor($diff / $intervals['minute']);
            return $diff == 1 ? $diff.' minute ago' : $diff.' minutes ago';
        }
    
        if($diff >= $intervals['hour'] && $diff < $intervals['day'])
        {
            $diff   =   floor($diff / $intervals['hour']);
            return $diff == 1 ? $diff.' hour ago' : $diff.' hours ago';
        }
    
        if($diff >= $intervals['day'] && $diff < $intervals['week'])
        {
            $diff   =   floor($diff / $intervals['day']);
            return $diff == 1 ? $diff.' day ago' : $diff.' days ago';
        }
    
        if($diff >= $intervals['week'] && $diff < $intervals['month'])
        {
            $diff   =   floor($diff / $intervals['week']);
            return $diff == 1 ? $diff.' week ago' : $diff.' weeks ago';
        }
    
        if($diff >= $intervals['month'] && $diff < $intervals['year'])
        {
            $diff   =   floor($diff / $intervals['month']);
            return $diff == 1 ? $diff.' month ago' : $diff.' months ago';
        }
    
        if($diff >= $intervals['year'])
        {
            $diff   =   floor($diff / $intervals['year']);
            return $diff == 1 ? $diff.' year ago' : $diff.' years ago';
        }
    }
    
    echo timeAgo(1436613754);  //Outputs 8 months ago
    
    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100