【问题标题】:How to convert seconds into days hours minutes in Laravel [duplicate]如何在 Laravel 中将秒转换为天小时分钟 [重复]
【发布时间】:2018-02-22 22:33:35
【问题描述】:

我想以秒为单位的时间间隔转换为天小时分钟。这个我试过了。

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

我得到了输出

90060 seconds

我的预期输出是

1 day 1 hour 1 minute

如何使用CarbonCarbonInterval 获得输出

【问题讨论】:

标签: php laravel php-carbon


【解决方案1】:

我有一个解决办法。

$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();

【讨论】:

  • 一行与:CarbonInterval::seconds(90060)->cascade();
  • @godbout - 几乎正是我所追求的!我使用CarbonInterval::seconds(90060)->cascade()->forHumans(); 来获得漂亮的格式
  • 很高兴它有助于保持您的代码整洁美观! ;)
  • 另一种解决方案:$time = \Carbon\Carbon::now(); echo $time->diffForHumans($time->copy()->addSeconds(120), true);
【解决方案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";
}

【讨论】:

    【解决方案3】:

    用碳试试这个:

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

    【讨论】:

      【解决方案4】:

      试试这个:

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

      【讨论】:

        【解决方案5】:

        试试这个

        $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";
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 2012-01-06
        • 2017-05-10
        • 1970-01-01
        相关资源
        最近更新 更多