Php 如何将时间格式化为“时间”;H:i:s";在拉威尔使用碳

Php 如何将时间格式化为“时间”;H:i:s";在拉威尔使用碳,php,laravel,datetime,php-carbon,Php,Laravel,Datetime,Php Carbon,如果用户输入“开始时间”和“停止时间”,我想找出在项目上花费的总时间。我已经能够访问所花费的时间,但它是一个日期间隔数组 我只想将结果格式化为“H:I:s”(小时:分钟:秒) 这是我控制器的代码 $start = Carbon::parse($request->strt_time); $end = Carbon::parse($request->stp_time); $time_spent = $end->diff($start); $spen

如果用户输入“开始时间”和“停止时间”,我想找出在项目上花费的总时间。我已经能够访问所花费的时间,但它是一个日期间隔数组

我只想将结果格式化为“H:I:s”(小时:分钟:秒)

这是我控制器的代码

    $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');
我已经在控制器顶部声明了Carbon类的使用(使用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”

diff()方法给出了CarbonInterval,它从DateInterval继承了format函数。文档规定,每个格式字符的前缀必须加百分号(%)

DateInterval::format(string$format):string
$一月=新日期时间('2010-01-01');
$二月=新日期时间('2010-02-01');
$interval=$二月->差异($一月);
//%a将输出总天数。
echo$interval->format(“%a total days”)。“\n”;
//而%d将只输出尚未包含的天数
//一个月。
echo$interval->格式(“%m个月,%d天”);
所以最终的解决办法是

$end->diff($start)->格式(“%H:%i:%s”);
来自:

当Carbon扩展
DateTime
时,它继承了它的方法,例如
diff()
将第二个日期对象作为参数并返回
DateInterval
实例

我们还提供了
diffascarbonterval()
类似于
diff()
但返回 一个
CarbonInterval
实例。查看第章了解更多信息 信息

因此,正如建议的那样,您可以:

花费的时间=$end->diff($start)->格式(“%H:%i:%s”);
为什么每个变量的前缀都是
%
?正如@aynber所指出的,这些国家:

每个格式字符必须以百分号(%)作为前缀

另一个选项是使用
gmdate()
helper:

$duration=$end->diffunseconds($start);
$PULTED_time=gmdate($H:i:s',$duration);
或者只是:

花费的时间=gmdate('H:i:s',$end->diffinsionds($start));

如果你
var\u dump($time\u dump),你会得到什么?您试图调试该问题的原因是什么?您是否尝试过一路上转储所有变量以检查其真实内容?我得到一个字符串“H:I:s”-@Aynbery您的格式字符串应该是
“%H:%I:%s”
请为您的代码添加一些解释,以便其他人可以从中学习。我看不出与原始代码有什么不同。这个答案是正确的,但缺少解释
$time_-spend
是一个CarbonInterval,它继承了DateInterval的format函数。声明
每个格式字符必须以百分号(%)作为前缀。
非常感谢大家。。。它现在起作用了。。。我真的很感激…@Micsedinam如果它有效,请接受这个答案。@AkashKumarVerma请给你的代码添加一些解释,以便其他人可以从中学习