Php 时间戳未正确显示用户发布后的分钟数,建议?

Php 时间戳未正确显示用户发布后的分钟数,建议?,php,Php,我不记得前几天我在这里找到了一个php函数,我一直在寻找该函数,它可以将我的用户发布的时间戳转换为分钟/小时/周,因为他们发布后,它在第一个小时内工作正常,我似乎不知道为什么,当一个用户发帖时,它会说59分钟前,倒计时到1分钟,然后它就会正常工作,任何建议我都会附上代码 不太确定该试什么 function time_elapsed_string($datetime, $full = false) { $now = new DateTime; $ago = new DateTime

我不记得前几天我在这里找到了一个php函数,我一直在寻找该函数,它可以将我的用户发布的时间戳转换为分钟/小时/周,因为他们发布后,它在第一个小时内工作正常,我似乎不知道为什么,当一个用户发帖时,它会说59分钟前,倒计时到1分钟,然后它就会正常工作,任何建议我都会附上代码

不太确定该试什么

function time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        'y' => 'year',
        'm' => 'month',
        'w' => 'week',
        'd' => 'day',
        'h' => 'hour',
        'i' => 'minute',
        's' => 'second',
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
        } else {
            unset($string[$k]);
        }
    }

    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' ago' : 'just now';
}

要快速测试上述功能,下面的一个简单演示应该说明该功能确实按照设计工作-除非我没有抓住要点

function time_elapsed_string( $datetime, $full = false ) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        'y' => 'year',
        'm' => 'month',
        'w' => 'week',
        'd' => 'day',
        'h' => 'hour',
        'i' => 'minute',
        's' => 'second',
    );
    foreach( $string as $k => &$v ) {
        if ( $diff->$k ) {
            $v = $diff->$k . ' ' . $v . ( $diff->$k > 1 ? 's' : '' );
        } else {
            unset( $string[$k] );
        }
    }
    if( !$full ) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' ago' : 'just now';
}


/* Some dummy datetime values for tests and a randomly generated final datetime */

$dt1='2018-08-18 15:06:12';
$dt2='2019-08-10 15:06:12';
$dt3='2019-08-18 15:06:12';
$dt4=date('Y-m-d H:i:s', strtotime( sprintf('now - %d %s', rand(1,59), rand(0,1)==1 ? 'minutes' : 'seconds' ) ) );



printf('
    <pre>
        %s -> %s
        %s -> %s
        %s -> %s
        %s -> %s
    </pre>',
    $dt1, time_elapsed_string( $dt1 ),
    $dt2, time_elapsed_string( $dt2 ),
    $dt3, time_elapsed_string( $dt3 ),
    $dt4, time_elapsed_string( $dt4 )
);

请澄清问题-我在1年前、1周前和4分钟前的3个日期进行了测试,所有测试看起来都很相似-在沙盒中作为独立代码运行,没有参数,工作正常:-怀疑输入数据中有此问题。你能提供输入示例吗?抱歉,澄清一下,函数在第一个小时后工作正常,如果我输入一个新的帖子,它将从1小时前开始倒计时,直到它达到0,在1小时后0,函数将按预期进行计数,希望这能更好地解释它。抱歉,澄清一下,功能在第一个小时后工作正常,如果我进入一个新帖子,它将从1小时前开始倒计时,直到达到0,在1小时后0,功能将按预期进行计数,希望这能更好地解释这一点。我只是复制了你在那里发布的确切功能,并将$dt1替换为2019-08-18 16:20:06,显示为51分钟前,而不是9分钟前。
2018-08-18 15:06:12 -> 1 year ago
2019-08-10 15:06:12 -> 1 week ago
2019-08-18 15:06:12 -> 15 minutes ago
2019-08-18 15:21:02 -> 56 seconds ago