php中的日期差异自定义输出

时间:2015-05-31 04:27:45

标签: php

这是我的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。

请告知。

3 个答案:

答案 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
)

http://codepad.viper-7.com/Zliglz

答案 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");