我发现这个非常好的 PHP 脚本可以将任何日期时间转换为相对字符串,例如:
'2013-05-01 00:22:35' -> '3 months ago'
这真的很酷,但我想“欺骗”这个函数,这样即使日期是,比方说,20 分钟前,函数返回1 hour ago
而不是20 minutes ago
. 因此,我想强制执行 1 小时的最小差异,即使差异小于 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';
}
我尝试了很多不同的东西,但没有一个真正奏效。
如何强制执行至少 1 小时的差异?
找出差异后,只需检查最大差异是否只有几分钟或几秒。如果是这样,请返回您需要的至少 1 小时。
// here is your foreach loop
// check if less than 1 hour, if so, return that
$keys = array_keys($string);
if ($keys[0] === 'i' || $keys[0] === 's') {
return 'less than 1 hour ago';
}
在线试试吧!
我把发布问题的时间放在这个例子中。当您在 1 小时后查看它时,您必须将测试用例修改为一个不到 1 小时前的 UTC 时间的 DateTime。
测试用例。现在是 2017-06-10 12:45:00 UTC。
time_elapsed_string("2017-06-10 12:11:19"); // less than 1 hour ago
time_elapsed_string("2017-06-10 11:44:00"); // 1 hour ago
time_elapsed_string("2017-06-10 11:44:00", true); // 1 hour, 1 minute ago
time_elapsed_string("2017-06-09 11:45:00", true); // 1 day, 1 hour ago
time_elapsed_string("2017-06-09 11:45:00"); // 1 day ago
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句