Jump to content
Hisoka.

Cálculo de porcentagem com segundos

Recommended Posts

Bom dia!

Eu qria uma ajuda pra criar um cálculo que gere uma porcentagem de 0% até 100% a partir dos segundos. Por ex: Eu tenho uma data limite e a data atual, qnt mais próximo a data atual estiver data final irá aumentando a porcentagem. Abaixo, ambas eu converto em segundos e aplico uma regra de 3, porém em segundos tá dando mais de 1000%. Em minutos funcionava, porem, o contador de porcentagem zerava ao final de cada hora.

O que eu consegui fzr até agr foi isso, baseado no calculo com minutos.

Calculo com segundos:

  $dataFinal = strtotime('2016-09-27 11:58:00');
  $sla = 1;
  echo 'timestamp:'.$time = time().'<br>';
  echo 'Seg. final:'.$dataFinal.'<br>';
  $sla = $sla * 60 * 60;//converto a qntdd de horas para segundos
  $porcentagem = ($time * 100)/$sla;
  echo $porcentagem;

Calculo com minutos:

 $sla = 1;
 $minutoAtual = date('i');
 $sla = $sla * 60;//converto em minutos.
 $porcentagem = ($minutoAtual * 100)/$sla;
 echo $porcentagem;

O calculo com minutos funciona com 1h. Se eu colocar $sla = 2, qnd chegar na metade do tempo, ele zera.

Share this post


Link to post
Share on other sites

Para isso você precisa de uma data inicial também. Seriam 3 datas:

Início

Fim

Atual

date_default_timezone_set('America/Sao_Paulo');

$inicio = new DateTime('2016-09-22 17:30:00');
$fim = new DateTime('2016-09-29 14:30:00');
$agora = new DateTime();

$diffInicioFim = $fim->getTimestamp() - $inicio->getTimestamp();
$diffInicioAgora = $agora->getTimestamp() - $inicio->getTimestamp();

$pct = $diffInicioAgora / $diffInicioFim * 100;

echo number_format($pct, 2), PHP_EOL;
  • +1 1

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Similar Content

    • By leonardorocha
      Prezados, boa tarde!
       
      Tenho uma apresentação que imprime determinados valores de acordo com a data cadastrada no sistema.
       
      O código abaixo está funcionando para algumas datas e outras não. Um exemplo é o intervalo de datas 01/03/2019 a 30/06/2019
       
      Este nunca é executado conforme o código abaixo. Se alguém souber aonde encontra-se o erro por favor me informe.
      <div class="row justify-content-md-center"> <?php foreach ($model->getItems() as $calendar) { $dataI = date("d/m/Y", strtotime($calendar->start_date)); $dataF = date("d/m/Y", strtotime($calendar->end_date)); $titulo = $calendar->title; ?> <div class="col-md-3 col-sm-6"> <div class="item-calendario"> <div itemprop="event" itemscope itemtype="http://schema.org/Event"> <?php $atual = strtotime(date("d/m/Y")); $periodo = array('inicio' => strtotime($dataI), 'fim' => strtotime($dataF)); if($atual >= $periodo['inicio'] && $atual <= $periodo['fim'] ){ echo '<div class="icone-calendario"><i class="fa fa-clock-o fa-lg" aria-hidden="true" style="color:#0661ab"></i></div> <div class="status-calendario agora"><span>AGORA</span></div>'; } if($atual < $periodo['inicio'] && $atual < $periodo['fim'] ){ echo '<div class="status-calendario"><span>EM BREVE</span></div>'; } ?> <div class="periodo-calendario" itemprop="startDate" content="{{startDateIso}}"> <span><?php echo $dataI . ' a ' . $dataF ?></span> </div> <div class="texto-calendario"> <a href="<?php echo $calendar->url; ?>" itemprop="url"> <span itemprop="name"><?php echo $titulo; ?></span> </a> </div> </div> </div> </div> <?php } ?> </div>  
    • By asacap1000
      Fala galera, estou com um problema na consulta no banco.
      Tenho uma tabela que dois campos foram criados como timestamp,
      No select eu não consigo trazer os resultados, somente tratando o campo como to_char.
      É obrigatório eu configurar desta forma? 
      Segue o select:
       
      SELECT DISTINCT T.ID, T.FINISH_EVENT,--ASSIM NÃO RETORNA E DÁ ERRO TO_CHAR(T.FINISH_EVENT, 'DD/MM/YYYY HH24:MI'),--ASSIM RETORNA T.GATE_ID, T.GATE_TYPE, I.TYPE, I.VALUE_CONFIRMED, T.SENT, TO_CHAR(T.START_EVENT, 'DD/MM/YYYY HH24:MI'), T.STATUS, T.USERNAME, T.UUID, T.WAY, TO_CHAR(T.START_EVENT, 'YYYYMMDD HH24:MI') FROM EASYGATE.INTGR_EVENT T, EASYGATE.INTGR_ASSET I WHERE T.STATUS = 'CRIADO_EASYGATE' AND T.ID = I.INTEGRATION_EVENT_ID AND I.VALUE_CONFIRMED IS NOT NULL GROUP BY T.ID, T.FINISH_EVENT, T.GATE_ID, T.GATE_TYPE, T.SENT, TO_CHAR(T.START_EVENT, 'DD/MM/YYYY HH24:MI'), TO_CHAR(T.START_EVENT, 'YYYYMMDD HH24:MI'), T.STATUS, T.USERNAME, T.UUID, T.WAY, I.TYPE, I.VALUE_CONFIRMED ORDER BY T.ID DESC
      No PLSql esse é o erro que aparece.
       
       
      Aguardo ajuda :) 
    • By Kaio Augusto de Castro
      Galera seguinte, eu ja esgotei meu cérebro e não consegui sair do lugar no meu banco tem um campo que chama-se data_criacao e ele é do tipo timestamp mas eu não sei como fazer com que ele grave a data e a hora no banco, o valor eu joguei dentro de um array ficando assim:
      $_SESSION['cad'] = array( 'nome' => $_POST['nome'], 'user' => $_POST['user'], 'pass' => $_POST['pass'], 'email' => $_POST['email'], 'fone' => $_POST['fone'], 'endereco' => $_POST['endereco'], 'cod_bairro' => $_POST['bairro'], 'cidade' => $_POST['cidade'], 'cod_estado' => $_POST['estado'], 'cep' => $_POST['cep'], 'cpf' => $_POST['cpf'], 'cod_status' => $_POST['status'], 'cod_nivel' => $_POST['nivel'], 'data_criacao' => NOW(), 'data_mod' => null, ); Não me recordo bem onde foi que eu li que o comando NOW() insere a data e a hora de acordo com o servidor, mas esta dando esse erro a baixo:
      Fatal error: Uncaught Error: Call to undefined function NOW() in /opt/lampp/htdocs/adm/cad_user.php:29 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/adm/cad_user.php on line 29
       
      Tentei usar o NOW() com e sem as aspas... e nenhum deles foi, se coloco ele com aspas ele deixa cadastrar mas não grava a data e nem a hora, a coluna no banco fica zerada...
       
      Se puderem me ajudar... ficarei muito agradecido... 
       
    • By Gurandao
      Olá galera, preciso criar um cálculo de correção monetária, já criei a tabela com todos os índices e fatores baseados no site https://api.tjsp.jus.br (Abril/2017).
      Vamos ao que interessa:
      Puxei os valores da tabela, a fórmula do cálculo é: Valor  (dividido) pelo fator do mes que venceu (multiplicado) pelo ultimo indice cadastrado (mes anterior).
      Então temos os valores: Valor (270.72), fator do mês que venceu (48.485963) e fator do mês anterior atual (66.839575).
      Eu criei o seguinte cálculo:
      $correcao =$valor / $fator_vcto * $fator_atual;
      ou seja:
      $correcao = 270.72 / 48.485963 * 66.839575;
      O resultado que ele me apresenta é 276.699454107990 sendo que na calculadora e no excel o valor correto calculado é 373.1968723
       
      Desde já agradeço à todos que puderem me ajudar!
       
    • By Breno Padovan
      Bom dia a todos,
      tenho uma tabela na seguinte estrutura:
      Field       Type
      itemid    bigint(20) unsigned
      clock    int(11)
      value    double(16,4)
      ns          int(11)
       
      Preciso fazer uma consulta filtrando por data, e estou usando a seguinte query:
      SELECT itemid,
      from_unixtime(clock,'%d/%m/%Y') AS date_data,
      from_unixtime(clock,'%H:%i:%s') AS Time_data,
      Value
      FROM history
      WHERE clock >= FROM_UNIXTIME('01/02/2016') AND clock < FROM_UNIXTIME('01/01/2017')
      and itemid = 24661
       
      Porém não me retorna nenhum valor. Já alterei o padrão de data e nada.
      Onde estaria errando?
       
      Grato,
      Breno Padovan
       
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.