我用它来创建一个日期差异的字符串:
$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年,月等...
答案 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个月前