Ir para conteúdo
Julio Cavallari

[Resolvido] Conversão função JS para PHP

Recommended Posts

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"

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

<?php
function convertTimeToInterval( $time ) {
    $intervalObj = ( new \DateTime( $time ) )->diff( new \DateTime( '00:00:00' ) );
    
    $interval = 'PT';
    $interval .= $intervalObj->h ? "{$intervalObj->h}H" : '';
    $interval .= $intervalObj->i ? "{$intervalObj->i}M" : '';
    $interval .= $intervalObj->s ? "{$intervalObj->s}S" : '';
    
    return $interval;
}

echo convertTimeToInterval( '02:02:50' ) . ' - ' . convertTimeToInterval( '02:00:50' );

//Resultado: PT2H2M50S - PT2H50S

 

No manual também há um exemplo interessante: http://php.net/manual/pt_BR/class.dateinterval.php#113415

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

http://php.net/manual/pt_BR/book.datetime.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Editado por Gabriel Heming
remover o quote

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por violin101
      Caros amigos
       
      Gostaria de tirar uma dúvida com os amigos.
       
      No Codeiginter tem como visualizar um arquivo .PDF dentro do sistema ?
       
      Por exemplo:
             o usuário realizou um download do arquivo --> DadosEmpresa.pdf
       
      Quando clicar em cima do arquivo, tem como visualizar em uma página o arquivo ?   E como faria ?
       
      Grato,
       
      Cesar
    • Por Ivana_Silva
      Olá a todos que estão lendo!
       
      Preciso de uma função PHP que filtre 2 padrões de campos a partir do caractere barra(|), preservando a linha.
       
      Em uma caixa de texto vou colar valores assim:
      0001|qwerty
      0002|091234
      0003|09164867
      0004|ab12312
      ...
      A caixa de texto:
      <form id="form" name="form" method="post" action=""> <textarea name="lista" type="text" id="lista" cols="48" rows="5" size="600" /></textarea> <br /> <br /> <button type="submit">Separar</button> </form> <?php ?> Quando eu clicar no botão Separar, preciso que o código filtre e mostre apenas as linhas que, após barra " | " possuam números inteiros de 6 e 8 dígitos(sem letras, símbolos ou pontos).
       
      Exemplo:
      Dados colados na caixa de texto:
      0001|qwerty
      0002|091234
      0003|09164867
      0004|ab12312
       
      Dados filtrados após clicar no botão Separar:
      0002|091234
      0003|09164867
       
      Filtrou apenas os campos que após a barra "|" possuem 6 e 8 dígitos(Nem mais nem menos), não é pra filtrar campos com letras ou números e letras, se tiver letra após a barra já descarta... É pra Filtrar e mostrar apenas as linhas que possuem 6 e 8 dígitos após a barra.
      Agradecida se alguém puder ajudar!
       
    • Por Dan Borges
      Olá,
       
      Tenho conhecimentos em C#, e ultimamente venho programando utilizando o MonoGame para desenvolver jogos. Estava procurando como é feito uma pista pseudo 3D, e achei esse artigo em JS: https://codeincomplete.com/posts/javascript-racer-v1-straight/
       
      Por ter a lógica de programação da mente, mesmo sem saber js, entendi parte do código, mas esse trecho, não:
      segments = []; for(var n = 0 ; n < 500 ; n++) { // arbitrary road length segments.push({ index: n, p1: { world: { z: n *segmentLength }, camera: {}, screen: {} }, p2: { world: { z: (n+1)*segmentLength }, camera: {}, screen: {} }, color: Math.floor(n/rumbleLength)%2 ? COLORS.DARK : COLORS.LIGHT }); } A primeira vista entendi que ele está adicionando valores ao array segments com o método push. Mas, os valores colocados, não fazem sentido para mim.
      É como se fosse criada uma classe dinamicamente (que contenha as variáveis:, index, p1, p2...) sem precisar declará-la.
      Seria basicamente isso? Ele criou um objeto que representa uma classe, mas sem nomeá-la, ou algo semelhante?
    • Por RSN
      Boa Noite, 
      Gostaria de saber se existe a possibilidade de gravar além do id do option value outra variavel, para enviar via post.
      <div class="form-group"> <label class="col-md-4 control-label" for="txtgrupo">Tipo de Pagamento : </label> <div class="col-md-4"> <select id="" class="selectpicker" data-live-search="true" name="tipo_pagamento" > <?php $query = mysql_query("SELECT * FROM tipo_pagamento ORDER BY id ASC"); while($result = mysql_fetch_array($query)) { echo '<option value="'.$result["id"].'">'.$result["nome_tipo"].'</option>'; } ?> </select> </div> </div>  
    • Por Incompetech
      Então.. a um tempo atrás eu fiz um post pedindo ajuda em relação a tooltip mas não obtive resposta, então decidi deixar essa funcionalidade para depois.
      Como disse na minha primeira pergunta eu estou praticando HTML / CSS / JS ... então comecei a fazer uma entrada para MU ONLINE que foi um dos jogos que mais joguei em épocas de LAN HOUSE. Então o que quero perguntar a vocês é o seguinte:

      Como podem ver nessa imagem acima ela tem um total de 10 itens que são icones pequenos que ao clicar neles logo ele irá dar loading na foto do item completo, gostaria de saber como fazer isso.
       
      No meu caso eu criei essa entrada no Photoshop: 
       
      E no caso gostaria de fazer a mesma coisa porém clicando nas setas que estão do lado da box como podem ver no centro da imagem.
      Para isto eu devo usar Js? E qual código devo usar, eu sou super perdido com Js.
      Agradeço desde já! :D

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.