这是我的PHP代码。 它工作正常。
<?php
........
$cdt1 = Date("Y-m-d H:i:s");
$last_seen = "2015-05-20 12:15:20";
$datetime22 = new DateTime($cdt1);
$datetime11 = new DateTime($last_seen);
$interval1 = $datetime11->diff($datetime22);
echo $interval1->format('%y years %m months and %d days %H hours, %i min and %s sec ');
.........
?>
它给我这样的输出。
0 years 0 months 0 days 00 hours 1 min and 52 sec.
类似的东西。
我想要
if year is 0 then year doesn't show.
if month is 0 then month doesn't show.
if days is 0 then days doesn't show.
same for hour and min as well.
例如,如果时间差为1小时24分30秒则应该 看起来像1小时24分30秒。我不想要年/月/日 是0。
请告知。
答案 0 :(得分:2)
一个选项可能是使用正则表达式:
$paragraph = "Hello World";
$paragraph = str_replace('World', '<span class="highlightClass">World</span>', $paragraph);
echo '<p>'.$paragraph.'</p>';
注意^字符显示正则表达式的开头,第四个参数一次只能进行一次替换,而第一个参数在while中用作bool(整数)标记。
答案 1 :(得分:2)
如果您将DateInterval
对象转换为array
,然后使用array_filter()
加array_intersect_key()
,则可以看到年,月,日,小时,分钟等的值。秒分别为非零。那么您可以根据需要设置format
。
$cdt1 = Date("Y-m-d H:i:s");
$last_seen = "2015-05-20 12:15:20";
$datetime22 = new DateTime($cdt1);
$datetime11 = new DateTime($last_seen);
$interval1 = $datetime11->diff($datetime22);
//print_r($interval1);
$allowed = array('y', 'm' , 'd', 'h', 'i', 's');
echo '<pre>';
print_r(array_filter(array_intersect_key((array)$interval1, array_flip($allowed))));
<强>输出强>
Array
(
[d] => 10
[h] => 17
[i] => 25
[s] => 55
)
答案 2 :(得分:0)
我得到了diafol(daniweb)的帮助。 https://www.daniweb.com/web-development/php/threads/496432/date-diff-customized-output-in-php
这是答案。
function from_now($date)
{
$datetime22 = new DateTime();
$datetime11 = new DateTime($date);
$interval1 = $datetime11->diff($datetime22);
$str = $interval1->format('%y,%m,%d,%h,%i,%s');
$names = ['years','months','days','hours','min','sec'];
$r = explode(',',$str);
$output = [];
for($i=0;$i<6;$i++) if($r[$i] != 0 || $i == 5) $output[] = $r[$i] . ' ' . $names[$i];
return implode(', ', $output);
}
echo from_now("2015-05-20 12:15:20");