Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho um função js que converte uma string formatada em ISO8601 para formato padrão de tempo.
function formatTimeVideoYoutube(time) {
var str_pad = function (input, pad) {
var str = input.replace(/\D/, '');
return (pad + str).slice(-pad.length);
};
var formatTime = function (full, h, m, s) {
var hour = h ? str_pad(h, '00') : '00';
var minute = m ? str_pad(m, '00') : '00';
var second = s ? str_pad(s, '00') : '00';
var timeVideo;
if(hour == '00'){
timeVideo = minute +':'+ second;
}else{
timeVideo = hour +':'+ minute +':'+ second;
}
return timeVideo;
};
var regex = /^PT(\d+H)?(\d+M)?(\d+S)?$/i;
return time.replace(regex, formatTime);
}
E queria converter ela pra PHP
O retorno que tenho é o seguinte "PT1H9M58S"
Onde PT sempre vai existir na string;
1H será as horas, nesse caso é 1 hora;
9M será os minutos, no caso são 9 minutos;
E 58S será os segundos, nesse caso 58 segundo.
"01:09:58"
Porém se alguma parte for 00, a string não vai possuir esse dado. Ex: "PT1H58S" = "01:00:58">
4 minutos atrás, Matheus Tavares disse:
Bom, me corrija se eu estiver errado, mas pelo que entendi você precisa fazer exatamente o mesmo que a função em JS postada, que seria converter uma data/hora em uma string no padrão de intervalo/duração.
É exatamente isso que você criou só que o contrário, a função precisa receber a string PT2H2M50S e retornar o intervalo 02:02:50
Mas aí é mais fácil ainda...
<?php
$interval = new \DateInterval( 'PT2H2M50S' );
printf( '%02d:%02d:%02d', $interval->h, $interval->i, $interval->s );
// Resultado: 02:02:50
Você deveria dar uma olhada no manual de data e hora do PHP.
Muito obrigado, vou dar uma olhada, não fazia ideia de que era possível converter uma string assim com DateInterval. nem me passou pela cabeça.
Bom, me corrija se eu estiver errado, mas pelo que entendi você precisa fazer exatamente o mesmo que a função em JS postada, que seria converter uma data/hora em uma string no padrão de intervalo/duração.
Para isso você deveria usar os recursos da biblioteca padrão do PHP, assim:
//Resultado: PT2H2M50S - PT2H50S
No manual também há um exemplo interessante: http://php.net/manual/pt_BR/class.dateinterval.php#113415