如何使用碳在laravel中将时间格式化为“ H:i:s”

时间:2019-05-09 15:56:41

标签: php laravel datetime php-carbon

鉴于用户输入了“开始时间”和“停止时间”,我想查找在项目上花费的总时间。我已经能够访问所花费的时间,但它以日期间隔数组的形式出现。

我只想将结果格式化为“ 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”

2 个答案:

答案 0 :(得分:1)

来自Carbon documentation

  

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');