鉴于用户输入了“开始时间”和“停止时间”,我想查找在项目上花费的总时间。我已经能够访问所花费的时间,但它以日期间隔数组的形式出现。
我只想将结果格式化为“ H:i:s”(小时:分钟:秒)
这是我的控制器中的代码
我已经在控制器顶部声明了Carbon类(use Carbon / Carbon;)的使用
$start = Carbon::parse($request->strt_time);
$end = Carbon::parse($request->stp_time);
$time_spent = $end->diff($start);
$spent_time = $time_spent->format('H:i:s');
我希望输出为00:00:00,但是我得到的是字符串“ H:i:s”
答案 0 :(得分:1)
Difference
随着Carbon扩展
DateTime
,它会继承其方法,例如diff()
将第二个日期对象作为参数并返回一个DateInterval
实例。我们还提供
diffAsCarbonInterval()
的行为,例如diff()
,但返回CarbonInterval
实例。查看CarbonInterval
一章以了解更多 信息。
因此,按照Akash的建议,您可以这样做:
$spent_time = $end->diff($start)->format('%H:%i:%s');
为什么%
在每个变量中都有前缀?正如@aynber指出的,the documentation指出:
每个格式字符必须以百分号(%)为前缀。
另一种选择是利用gmdate()
助手:
$duration = $end->diff($start);
$spent_time = gmdate('H:i:s', $duration);
或者只是:
$spent_time = gmdate('H:i:s', $end->diff($start));
答案 1 :(得分:-2)
diff()方法提供CarbonInterval,它继承了DateInterval的格式函数。文档指出,每个格式字符必须以百分号(%)为前缀
DateInterval::format ( string $format ) : string
$january = new DateTime('2010-01-01');
$february = new DateTime('2010-02-01');
$interval = $february->diff($january);
// %a will output the total number of days.
echo $interval->format('%a total days')."\n";
// While %d will only output the number of days not already covered by the
// month.
echo $interval->format('%m month, %d days');
所以最终的解决方案是
$end->diff($start)->format('%H:%i:%s');