Длительность форматирования (время) в PHP - PullRequest
8 голосов
/ 30 июня 2011

Вывод из api направлений У меня есть время, которое потребуется пользователю, чтобы добраться от a до b.На данный момент это минуты, но если поездка пользователя займет 3 часа и 20 минут, она выдаст 200 минут.

Я бы хотел, чтобы выяснилось, что это больше 60 минут.затем разделите на 60 и добавьте остаток, чтобы дать

3 часа 20 минут.

Как нам это сделать.

Чудесный

Ответы [ 9 ]

21 голосов
/ 18 октября 2013

с 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

9 голосов
/ 30 июня 2011
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;
}
5 голосов
/ 18 октября 2015

Если у вас есть длительность в секундах, вы можете отформатировать ее с помощью функции PHP gmdate():

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

(Примечание: работает до 24 часов)

3 голосов
/ 30 июня 2011
$minutes = 200;
if ($minutes >= 60)
{
  $hours = (int)($minutes / 60);
  $minutes = $minutes % 60;
}
1 голос
/ 30 июня 2011
<?php

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

?>

Используйте деление по модулю:)

0 голосов
/ 04 января 2019

Вы можете использовать DateInterval->format.

$rawInterval = 'PT200M';
$formattedInterval = (new DateInterval($rawInterval))->format('%Hh %Im %Ss');

Выход: 02h 40m 00s.

0 голосов
/ 21 августа 2014

Спасибо за функцию.Мне нужно было изменить его, чтобы он работал лучше: минуты превысили 60:

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

Лучший

0 голосов
/ 13 июля 2014

Простой пример продолжительности до времени форматирования (с продолжительностью, указанной в секундах, и выходными данными, отформатированными как [##:] ##: ##):

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";
}
0 голосов
/ 30 июня 2011
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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...