Это должно работать для вас.
Отказ от ответственности: Это не было проверено, поэтому я не знаю, работает ли оно
<?php
$str = 'PT1H4M4S';
$str = substr($str, 2); //Returns 4M4S
$timeArray = str_split($string, 2); //Returns { '4M', '4S' }
$formattedTime = '';
foreach ($timeArray as $time) {
switch (substr($time, 0)) //Looking at first value
{
case 'H':
$formattedTime .= substr($time, 1); //Returns 4
break;
case 'M':
$formattedTime .= str_pad(substr($time, 1), 2, '0', STR_PAD_LEFT); //Returns 04
break;
case 'S':
$formattedTime .= str_pad(substr($time, 1), 2, '0', STR_PAD_LEFT); //Returns 04
break;
}
$formattedTime .= ':';
}
$formattedTime .= substr($time, -1); //Removes last ':'
echo $formattedTime;
?>