在 PHP 中格式化持续时间(时间)

问题描述 投票:0回答:9

从方向 api 输出,我有用户从 a 到 b 所需的持续时间。目前是分钟,但如果用户旅程需要 3 小时 20 分钟,它将输出 200 分钟。

我希望计算出该时间大于 60 分钟。然后除以 60 再加上余数得到

3小时20分钟。

我们如何做到这一点。

太棒了

php datetime
9个回答
24
投票

使用 php >= 5.3.0 你可以做到这一点:

$dt = new DateTime();
$dt->add(new DateInterval('PT200M'));
$interval = $dt->diff(new DateTime());
echo $interval->format('%Hh %Im %Ss');

输出(在我的语言环境上):

02h 40m 00s

来源:http://php.net/manual/en/class.dateinterval.php


13
投票
function getNiceDuration($durationInSeconds) {

  $duration = '';
  $days = floor($durationInSeconds / 86400);
  $durationInSeconds -= $days * 86400;
  $hours = floor($durationInSeconds / 3600);
  $durationInSeconds -= $hours * 3600;
  $minutes = floor($durationInSeconds / 60);
  $seconds = $durationInSeconds - $minutes * 60;

  if($days > 0) {
    $duration .= $days . ' days';
  }
  if($hours > 0) {
    $duration .= ' ' . $hours . ' hours';
  }
  if($minutes > 0) {
    $duration .= ' ' . $minutes . ' minutes';
  }
  if($seconds > 0) {
    $duration .= ' ' . $seconds . ' seconds';
  }
  return $duration;
}

9
投票

如果您的持续时间以秒为单位,您可以使用 PHP

gmdate()
函数对其进行格式化:

echo gmdate("H:i:s", $seconds);

(注:工作持续时间长达24小时)


3
投票
$minutes = 200;
if ($minutes >= 60)
{
  $hours = (int)($minutes / 60);
  $minutes = $minutes % 60;
}

1
投票
<?php

$time = 200;    // minutes
if ($time > 60) {
    $minutes = $time % 60;
$hours = ($time - $minutes) / 60;
}
echo "$hours hours $minutes minutes";

?>

使用模除法:)


0
投票
function format_minutes($value)
{
    $hours = intval($value / 60);
    $minutes = $value % 60;

    if ($hours != 0) {
        $str = $hours . ' hour';

        // Handle pluralisation.
        if (abs($hours) != 1) {
            $str .= 's';
        }
    }

    // Always show minutes if there are no hours.
    if ($minutes != 0 || $hours == 0) {
        $str .= ' ' . $minutes . ' minute';

        // Handle pluralisation.
        if (abs($minutes) != 1) {
            $str .= 's';
        }
    }

    // There will be a leading space if hours is zero.
    return trim($str);
}

0
投票

感谢您的功能。我需要改变它以使其更好地工作: 分钟超过60分钟:

    $seconds = $secs % 60;
    $hours   = floor($secs / 3600); 
    $secs = $secs - $hours*3600; 
    $minutes = floor($secs / 60);

最好


0
投票

对于那些需要它的人...分钟到时间段 - PT:

<?php
function pttime($time, $format)
{
    if ($time < 1) {
        return;
    }
    $hours = floor($time / 60);
    $minutes = ($time % 60);

    //is PT
    if ($format == 'PT') {

        //full hour
        if (($hours > 0) && ($minutes == 0)) {
            $time_result = 'PT' . $hours . 'H';
        }

        //hour and minutes
        if (($hours > 0) && ($minutes <> 0)) {
            $time_result = 'PT' . $hours . 'H' . $minutes . 'M';
        }

        //just minutes
        if ($hours == 0) {
            $time_result = 'PT' . $minutes . 'M';
        }
    }

    //it's not PT
    else {
        $time_result = sprintf("%02s", $hours) . ':' . sprintf("%02s", $minutes);

    }
    return $time_result;
}

//input in minutes and its outputs
echo pttime(155,'PT'); //output -> PT2H35M
echo pttime(52,'PT');  //output -> PT52M
echo pttime(60,'PT');  //output -> PT1H
echo pttime(60,'');    //output -> 01:00

-2
投票

一个简单的持续时间到格式化时间示例(持续时间以秒为单位,输出格式为 [##:]##:##):

public function format_duration($secs, $delimiter = ':')
{
    $seconds = $secs % 60;
    $minutes = floor($secs / 60);
    $hours   = floor($secs / 3600);

    $seconds = str_pad($seconds, 2, "0", STR_PAD_LEFT);
    $minutes = str_pad($minutes, 2, "0", STR_PAD_LEFT).$delimiter;
    $hours   = ($hours > 0) ? str_pad($hours, 2, "0", STR_PAD_LEFT).$delimiter : '';

    return "$hours$minutes$seconds";
}
© www.soinside.com 2019 - 2024. All rights reserved.