PHP时间友好型日期不起作用

PHP时间友好型日期不起作用,php,Php,我有此功能,用于使用unix时间戳和日期格式显示友好的日期时间: function friendlyDate($timestamp, $formats = null) { $_DATE_FORMAT = array( 'DAY' => 'DAY', 'DAY_HOUR' => 'DAY_HOUR', 'HOUR' => 'HOUR',

我有此功能,用于使用unix时间戳和日期格式显示友好的日期时间:

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;
}
但我看到了这个结果:
SECOND


如何解决此问题,我想显示日期和时间。

这是我自己使用的
timeAgo()
函数

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
函数timeAgo($timestamp)
{
//在此计算
//@类型转换
//@现在,,
//@时间戳差异
$timestamp=(int)$timestamp;
$current\u time=$\u SERVER['REQUEST\u time'];
$diff=$current_time-$timestamp;
//以秒为单位的间隔
$interval=数组(
“年份”=>31556926,
“月”=>2629744,
“周”=>604800,
“日”=>86400,
“小时”=>3600,
“分钟”=>60
);
//现在我们只是找到了区别
如果($diff==0)
{
返回“刚才”;
}
如果($diff<60)
{
返回$diff==1?$diff.“秒前”:$diff.“秒前”;
}
如果($diff>=60&$diff<$interval['hour'])
{
$diff=楼层($diff/$interval['minute']);
返回$diff==1?$diff.“分钟前”:$diff.“分钟前”;
}
如果($diff>=$interval['hour']&&$diff<$interval['day'])
{
$diff=楼层($diff/$interval['hour']);
返回$diff==1?$diff.“小时前”:$diff.“小时前”;
}
如果($diff>=$interval['day']&&$diff<$interval['week'])
{
$diff=楼层($diff/$interval['day']);
返回$diff==1?$diff.“前一天”:$diff.“前几天”;
}
如果($diff>=$interval['week']&&$diff<$interval['month'])
{
$diff=下限($diff/$interval['week']);
返回$diff==1?$diff.“周前”:$diff.“周前”;
}
如果($diff>=$interval['month']&&$diff<$interval['year'])
{
$diff=下限($diff/$interval['month']);
返回$diff==1?$diff.“月前”:$diff.“月前”;
}
如果($diff>=$interval['year']))
{
$diff=下限($diff/$interval['year']);
返回$diff==1?$diff.“年前”:$diff.“年前”;
}
}
回音时间(1436613754)//8个月前的产出

这是我自己使用的
timeAgo()
函数

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
函数timeAgo($timestamp)
{
//在此计算
//@类型转换
//@现在,,
//@时间戳差异
$timestamp=(int)$timestamp;
$current\u time=$\u SERVER['REQUEST\u time'];
$diff=$current_time-$timestamp;
//以秒为单位的间隔
$interval=数组(
“年份”=>31556926,
“月”=>2629744,
“周”=>604800,
“日”=>86400,
“小时”=>3600,
“分钟”=>60
);
//现在我们只是找到了区别
如果($diff==0)
{
返回“刚才”;
}
如果($diff<60)
{
返回$diff==1?$diff.“秒前”:$diff.“秒前”;
}
如果($diff>=60&$diff<$interval['hour'])
{
$diff=楼层($diff/$interval['minute']);
返回$diff==1?$diff.“分钟前”:$diff.“分钟前”;
}
如果($diff>=$interval['hour']&&$diff<$interval['day'])
{
$diff=楼层($diff/$interval['hour']);
返回$diff==1?$diff.“小时前”:$diff.“小时前”;
}
如果($diff>=$interval['day']&&$diff<$interval['week'])
{
$diff=楼层($diff/$interval['day']);
返回$diff==1?$diff.“前一天”:$diff.“前几天”;
}
如果($diff>=$interval['week']&&$diff<$interval['month'])
{
$diff=下限($diff/$interval['week']);
返回$diff==1?$diff.“周前”:$diff.“周前”;
}
如果($diff>=$interval['month']&&$diff<$interval['year'])
{
$diff=下限($diff/$interval['month']);
返回$diff==1?$diff.“月前”:$diff.“月前”;
}
如果($diff>=$interval['year']))
{
$diff=下限($diff/$interval['year']);
返回$diff==1?$diff.“年前”:$diff.“年前”;
}
}
回音时间(1436613754)//8个月前的产出

我看到的主要问题是格式字符串中没有任何格式指令;i、 e.
$\u DATE\u格式的值

sprintf()
函数执行到最后时,格式字符串只包含单词“SECOND”。这意味着将忽略
$seconds
变量中的值

尝试用以下内容替换格式数组:

$_DATE_FORMAT = array(
    'DAY'           => '%d day(s)',
    'DAY_HOUR'      => '%d day(s), %d hour(s)',
    'HOUR'          => '%d hour(s)',
    'HOUR_MINUTE'   => '%d hour(s), %d minute(s)',
    'MINUTE'        => '%d minute(s)',
    'MINUTE_SECOND' => '%d minute(s), %d second(s)',
    'SECOND'        => '%d second(s)'
);
sprintf()
在格式字符串中看到
%d
时,它将替换后续参数中的十进制整数值。在本例中,这就是变量,如
$seconds
等。此示例并不完美,因为它没有给格式提供在单数和复数之间进行选择的机会,但希望这是一个好的开始


(这可能不是函数中唯一的问题,因为我还没有机会实际测试它。)

我看到的主要问题是格式字符串中没有任何格式指令;i、 e.
$\u DATE\u格式的值

sprintf()
函数执行到最后时,格式字符串只包含单词“SECOND”。这意味着将忽略
$seconds
变量中的值

尝试用以下内容替换格式数组:

$_DATE_FORMAT = array(
    'DAY'           => '%d day(s)',
    'DAY_HOUR'      => '%d day(s), %d hour(s)',
    'HOUR'          => '%d hour(s)',
    'HOUR_MINUTE'   => '%d hour(s), %d minute(s)',
    'MINUTE'        => '%d minute(s)',
    'MINUTE_SECOND' => '%d minute(s), %d second(s)',
    'SECOND'        => '%d second(s)'
);
sprintf()
在格式字符串中看到
%d
时,它将替换后续参数中的十进制整数值。在本例中,这就是变量,如
$seconds
等。这个示例并不完美,因为它没有给格式提供在单数和复数之间进行选择的机会,但希望它是一颗好星