Как преобразовать время в формате PT в обычную строку в php - PullRequest
1 голос
/ 24 марта 2020

У меня есть данные вроде следующего:

PT45M
PT1H30M

Как я могу получить вывод типа

45 min
1 hour 30 min

Есть ли в php какая-либо функция для получения вывода, как показано?

    $dur="PT45M"; 
    $d = new DateInterval($dur);
    $duration=$d->format('%h hour %m min');
    $duration=str_replace(" 0 min", "",$duration );
    $duration=str_replace("0 hour", "",$duration );

Это одно решение почти сработало для меня. Но на PT45M он показывает 0 часов. :( Это может быть простая функция, но я не могу найти решение. Много времени потратил на поиск в Google :( Надеюсь, кто-то может мне помочь с этим.

Ответы [ 3 ]

1 голос
/ 24 марта 2020
     <?php
      $date = new DateTime();
      $dur="PT1H30M"; 
      $datetime1 = new DateInterval($dur);

      if($datetime1->format('%y') != 0)
      {
         echo $datetime1->format('%y Year');
      }
      if($datetime1->format('%m') != 0)
      {
         echo $datetime1->format('%m Month');
      }
      if($datetime1->format('%d') != 0)
      {
         echo $datetime1->format('%d Day');
      }
      if($datetime1->format('%h') != 0)
      {
         echo $datetime1->format('%h Hour');
      }
      if($datetime1->format('%i') != 0)
      {
         echo $datetime1->format('%i Min');
      }
      if($datetime1->format('%s') != 0)
      {
         echo $datetime1->format('%s Second');
      }

  ?>
0 голосов
/ 24 марта 2020

Функция, которая создает удобочитаемый формат из объекта DateInterval:

function dateIntervalToHumanString(\DateInterval $interval) {
  $units = array("y"=>"year","m"=>"month","d"=>"day","h"=>"hour","i"=>"minute","s"=>"second");
  $specString = "";
  foreach($units as $prop => $spec){
    if($number=$interval->$prop){
      $specString .= $number." ".$spec;
      $specString .= $number > 1 ? "s " : " ";
    }  
  }
  return trim($specString); 
}

Как его использовать?

$specStr = 'P2Y4DT1H8M';
$di = new DateInterval($specStr);
$humanString = dateIntervalToHumanString($di);
echo $humanString;  //2 years 4 days 1 hour 8 minutes
0 голосов
/ 24 марта 2020

Решение приведено ниже. Я использовал% m вместо% i в течение нескольких минут. (% m для чисел c месяц)

Вот документация: https://www.php.net/manual/en/function.date.php

    $dur="PT45M"; 
    $d = new DateInterval($dur);
    $duration=$d->format('%h hour %i min');
    $duration=str_replace(" 0 min", "",$duration );
    $duration=str_replace("0 hour", "",$duration );
...