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