Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中将PT格式的持续时间转换为常规字符串_Php_Date_Datetime_Formatting - Fatal编程技术网

如何在php中将PT格式的持续时间转换为常规字符串

如何在php中将PT格式的持续时间转换为常规字符串,php,date,datetime,formatting,Php,Date,Datetime,Formatting,我有如下数据 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_rep

我有如下数据

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小时:(
这可能是一个简单的函数,但我找不到解决方案。我在谷歌上花了很多时间:(希望有人能帮我解决这个问题。

下面给出了解决方案。我用%m代替了用%I几分钟。(%m代表数字月)

以下是文件:


从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
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