如何在Laravel中将秒数转换为天时分秒

23

我想将时间间隔从秒转换为天小时分钟。我已经尝试过这个。

$value = '90060';
CarbonInterval::seconds($value)->forHumans();

我收到了输出

90060 seconds

我的预期输出是

1 day 1 hour 1 minute

如何使用 CarbonCarbonInterval 获取输出


这可能有所帮助 https://dev59.com/mZbfa4cB1Zd3GeqPpysS - Minar Mnr
1
文档中有很多例子(http://carbon.nesbot.com/docs/#api-interval)。 - scrowler
2
请查看此链接:http://carbon.nesbot.com/docs/#api-difference - asolenzal
1
请尝试访问 https://dev59.com/nnA75IYBdhLWcg3wqK__ - Gayan
1
1998/06/09 02:01:00,这个怎么样? - Vipertecpro
5个回答

49

我有一个解决方案。

$value = '90060';
$dt = Carbon::now();
$days = $dt->diffInDays($dt->copy()->addSeconds($value));
$hours = $dt->diffInHours($dt->copy()->addSeconds($value)->subDays($days));
$minutes = $dt->diffInMinutes($dt->copy()->addSeconds($value)->subDays($days)->subHours($hours));
echo CarbonInterval::days($days)->hours($hours)->minutes($minutes)->forHumans();

更新的解决方案

CarbonInterval::seconds(90060)->cascade()->forHumans();

22
CarbonInterval::seconds(90060)->cascade(); 的意思是:将90,060秒转换为更高时间单位的时间段,例如将秒转换为分钟和小时,并将其表示成一个可读性更好的字符串。 - godbout
4
@godbout - 几乎完全符合我的要求!我使用 CarbonInterval::seconds(90060)->cascade()->forHumans(); 来获得漂亮的格式。 - david_nash
1
很高兴它能帮助保持你的代码整洁美观!;) - godbout
1
另一种解决方案: $time = \Carbon\Carbon::now(); echo $time->diffForHumans($time->copy()->addSeconds(120), true); - Mohamad Hamouday

3

试一试

$init = 150065;
$day = floor($init / 86400);
$hours = floor(($init -($day*86400)) / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;

echo "$day:$hours:$minutes:$seconds";

我使用了这个解决方案,我需要的下一个输出格式是:d:H:i:s,谢谢。 - Jonnathan Carrasco
你可以使用 PHP 函数 gmdatehttp://php.net/manual/zh/function.gmdate.phpgmdate("H:i:s", $seconds); - Shawinder Jit Singh

2
function dates($value) {
    $s = $ss%60;
    $m = floor(($value %3600)/60);
    $h = floor(($value %86400)/3600);
    $d = floor(($value %2592000)/86400);
    $M = floor($value /2592000);

    return "$M months, $d days, $h hours, $m minutes, $s seconds";
}

1

Try this, with carbon:

$seconds = 90060;
$dt = Carbon::now()->addSecond($seconds);
$dt_old = Carbon::now();
$days = $dt->diffInDays($dt_old);
$dt = $dt->subDays($days);
$hours = $dt->diffInHours($dt_old);
$dt = $dt->subHours($hours);
$minutes = $dt->diffInMinutes($dt_old);

echo $days.'<br>';
echo $hours.'<br>';
echo $minutes.'<br>';

0

试试这个:

$value = '90060';

        $inAMinute = 60;
        $inAnHour = 60 * $secondsInAMinute;
        $inADay = 24 * $secondsInAnHour;

        $days = floor($value / $inADay);

        $hourSeconds = $value % $inADay;
        $hours = floor($hourSeconds / $inAnHour);

        // Extract minutes
        $minuteSeconds = $hourSeconds % $inAnHour;
        $minutes = floor($minuteSeconds / $inAMinute);


        $timeValues = [];
        $sections = [
            'day' => (int)$days,
            'hour' => (int)$hours,
            'minute' => (int)$minutes,

        ];

        foreach ($sections as $name => $value){
            if ($value > 0){
                $timeValues[] = $value. ' '.$name;
            }
        }

        $d= implode(' ', $timeValues);
        dd($d);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接