PHP DateTime从diff()中删除零值

时间:2017-04-23 16:57:12

标签: php datetime

我用它来创建一个日期差异的字符串:

$startDate = DateTime::createFromFormat(self::$timeFormat, $startDate);
$difference = $startDate->diff($endDate);

$dateTimeElapsed = $difference->format('%y years %m months %a days %h hours %i minutes %S seconds');

return $dateTimeElapsed;

这将输出如下内容: 0年0个月0天0小时0分27秒

我如何对其进行编码以便删除任何零值,例如0年,月等...

2 个答案:

答案 0 :(得分:1)

排序
$dateTimeElapsed = $difference->format('%y|%m|%a|%h|%i|%S');

$outPuts = [
    "years", "months", "days", "hours", "minutes", "seconds"
];

$explodedDateString = explode("|", $dateTimeElapsed);

$dateTimeElapsed = array_combine($outPuts, $explodedDateString);

$finalDateDiff = 0;
foreach($dateTimeElapsed as $string => $value)
{
   if($value > 0)
   {
      if($value == 1)
      {
        $string = substr($string, 0, -1);
      }
       $finalDateDiff = $value . " " . $string;
       break;
    }
}

return $finalDateDiff;

仅通过输出大于零的最接近值来工作。使用explode将diff值放入数组中。将两个数组组合在一起,以便字符串命名"年,月"等与其值匹配,然后使用foreach检查值是否超过0。

返回0表示不匹配或所有值均为0.

编辑: 更新了代码,以便当差异为1年,1个月,1天等时...它会删除“'结束使它在语法上正确。

答案 1 :(得分:0)

一个简单的解决方案是使用php diffForHumans()中的Carbon class函数:

$dt = Carbon::createFromFormat('Y-m-d H:i:s', '2017-01-22 15:30:00');   
echo $dt->diffForHumans();

输出:

  

3个月前

diffForHumans() documentation on carbon.nesbot.com