Ir para conteúdo
asacap1000

Calculo de diferença de dias horas e minutos

Recommended Posts

Salve Galera, estou quase finalizando um relatório porém travei em um campo.

Este relatório consiste em subtrair hora de entrada e saída, trazer em dias horas e minutos de um período.

Depois preciso calcular a média destes resultados.

eu barrei na parte de dias não vem a informação correta.

 

Segue select se alguem puder me dar uma força.

 

SELECT io.id_in_out, IOP.DOCUMENT,IO.TIME_IN entrada, IO.TIME_RELEASE_PP saida,
       LPAD(TRUNC(((IO.TIME_RELEASE_PP - IO.TIME_IN) /24 )), 2, '0') || ':' ||
       LPAD(TRUNC(((IO.TIME_RELEASE_PP - IO.TIME_IN) * 24 )), 2, '0') || ':' ||
       LPAD(TRUNC(MOD((IO.TIME_RELEASE_PP - IO.TIME_IN) * 86400, 3600) / 60), 2, '0')  || ':' ||
       LPAD(TRUNC(MOD(MOD((IO.TIME_RELEASE_PP - IO.TIME_IN) * 86400, 3600), 60)), 2, '0')  TEMPO
  FROM DESMEMBR   DD,
       IN_OUT_POS IOP,
       IN_OUT     IO,
       SPEDITEURE S,
       VEHICLE    V,
       DRIVER     D
 WHERE DD.TYP_PROCESS = 'DINACI'
   AND 'DI' = IOP.TYP_DOCUMENT
   AND DD.NR_DI = IOP.DOCUMENT
   AND IOP.ID_IN_OUT = IO.ID_IN_OUT
   AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE')
   AND IO.STAT <> '80'
   AND S.ID_SPEDITEUR = IO.ID_SPEDITEUR
   AND V.ID_VEHICLE = IO.ID_VEHICLE
   AND IO.TIME_IN >= TO_DATE('01/12/2018', 'dd/mm/yyyy')
   AND IO.TIME_IN <= TO_DATE('31/12/2018', 'dd/mm/yyyy')
   AND D.ID_DRIVER = IO.ID_DRIVER

O resultado acima está vindo assim:

 

1    378470    1211942181    14/12/2017 09:35:41    14/12/2017 13:32:31    00:03:56:50
2    378470    1211942181    14/12/2017 09:35:41    14/12/2017 13:32:31    00:03:56:50
 

Depois de acertar isso preciso realizar a média que a principio eu utilizaria o AVG mas dá erro.

 

Agradeço quem puder me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os campos estão no formato DATE ?

Se tem a data e hora ?

 

Quando se subtrai duas "dates" se obtem uma diferença em dias (ou fração) 

Uma solução é trabalahr em segundos e depois converter estes valores.

 

Não sei se o AVG é aceito para DATE , nunca tentei.

 

veja se isto ajuda  

Compartilhar este post


Link para o post
Compartilhar em outros sites

se isto ajudar em php está ai

                                                $horario_notificacao = $notificacoes[$i]['tempo'];

                                                $data_convertido = date('d/m/Y',strtotime($horario_notificacao));
                                                $horario_convertido = date('H/i/s',strtotime($horario_notificacao));

                                                $data = explode("/", $data_convertido);    
                                                                        
                                                $dia = $data[0];
                                                $mes = $data[1];
                                                $ano = $data[2];

                                                //pega valores da data, dia, mes e ano em que aconteceu a noitificação
                                                $horas_ano = 24 * 30 * 12;
                                                $horas_mes = 24 * 30;
                                                $horas_dia = 24; 

                                                //converte dia, mes, ano em horas
                                                $horas_data_dia = $dia * $horas_dia;
                                                $horas_data_mes = $mes * 24 * 30;
                                                $horas_data_ano = $ano * 24 * 30 * 12;
                                                $horas_data = $horas_data_dia + $horas_data_mes + $horas_data_ano;


                                                $data_atual = date('d/m/Y');
                                                $data_atual = explode("/", $data_atual);
                                                $dia_atual = $data_atual[0];
                                                $mes_atual = $data_atual[1];
                                                $ano_atual = $data_atual[2];

                                                $horas_atual_dia = $dia_atual * $horas_dia;
                                                $horas_atual_mes = $mes_atual * $horas_mes;
                                                $horas_atual_ano = $ano_atual * $horas_ano;
                                                $horas_atuais = $horas_atual_dia + $horas_atual_mes + $horas_atual_ano;

                                                $diferenca_horas = ($horas_atuais - $horas_data);

 

 eu não entendo esta linguagem, mas da pra pegar uma lógica na minha solução que utilizei para calcular a diferença de horas entre uma notificação

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Motta disse:

Os campos estão no formato DATE ?

Se tem a data e hora ?

 

Quando se subtrai duas "dates" se obtem uma diferença em dias (ou fração) 

Uma solução é trabalahr em segundos e depois converter estes valores.

 

Não sei se o AVG é aceito para DATE , nunca tentei.

 

veja se isto ajuda  

 Motta boa tarde olha o que eu fiz, acho que deu certo:

 

SELECT LPAD(TRUNC(AVG((F.TEMPO)) / (24 * 60 * 60)), 2, '0') || ':' ||
       TO_CHAR(TO_DATE('01/01/2013 00:00:00', 'DD/MM/YYYY HH24:MI:SS') +
               (AVG(F.TEMPO)) / (24 * 60 * 60),
               'HH24:MI:SS') MEDIA
  FROM (SELECT X.ID_IN_OUT, 24 * 60 * 60 * (X.SAIDA - X.ENTRADA) TEMPO
          FROM (SELECT IO.ID_IN_OUT,
                       IOP.DOCUMENT,
                       IO.TIME_IN         ENTRADA,
                       IO.TIME_RELEASE_PP SAIDA
                  FROM DESMEMBR   DD,
                       IN_OUT_POS IOP,
                       IN_OUT     IO,
                       SPEDITEURE S,
                       VEHICLE    V,
                       DRIVER     D
                 WHERE DD.TYP_PROCESS = 'DINACI'
                   AND 'DI' = IOP.TYP_DOCUMENT
                   AND DD.NR_DI = IOP.DOCUMENT
                   AND IOP.ID_IN_OUT = IO.ID_IN_OUT
                   AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE')
                   AND IO.STAT <> '80'
                   AND S.ID_SPEDITEUR = IO.ID_SPEDITEUR
                   AND V.ID_VEHICLE = IO.ID_VEHICLE
                      --AND IO.ID_IN_OUT = '385617'
                   AND IO.TIME_IN >= TO_DATE('01/12/2018', 'dd/mm/yyyy')
                   AND IO.TIME_IN <= TO_DATE('31/12/2018', 'dd/mm/yyyy')
                   AND D.ID_DRIVER = IO.ID_DRIVER) X) F

image.png.ee27da9bde485f9f25ac7ddba70ec96d.png

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 mr22robot
      Estou com uma dúvida. É possível determinar um select a partir de uma escolha?
      Ex. 
      SELECT CASE WHEN a < b THEN select * from tabela1 WHEN d < e THEN select * form tabela2 END FROM tabela; Algo parecido. Se uma condição for atendida select1 , se outra condição for atendida: select2.
      O que acontece: estou com um relatorio que preciso criar no winthor e não consigo melhorar isso. Tenho de fazer três relatorios como solução. Se eu consigo implantar isso, eu faria somente um relatorio. 
      Tipo se marcar um campo, sai um relatorio. Se marcar outro, saí outro relatorio.
    • Por GabrielB3r
      Bom dia,
      estou tentando criar um sistema de empréstimo e devolução de documentos.
      Funciona da seguinte forma:
      A pessoa tem o opção de cadastrar novos documentos,os quais são inseridos da tabela "dossie_cadastrado", e ela pode cadastrar o empréstimo e a devolução do mesmo que ficam salvos na tabela "dossie_emprestimo".
      A parte de cadastro e empréstimo consegui fazer funcionar, meu problema é na hora de cadastrar a devolução. Preciso inserir a data atual no último cadastro de um determinado dossie na tabela "dossie_emprestimo".
       
      Tenho o seguinte código:
      if(isset($_POST["cod_cad"])){         $cod_cad = $_POST["cod_cad"];         }          if(isset($_GET["cod_cad"])){         $cod_cad = $_GET["cod_cad"];     } $cod_cad = strip_tags($_POST['cod_cad']); $select_upd= mysqli_query($conexao_bd,"SELECT id_emp, data_emp from dossie_emprestimo where cod_cad='$cod_cad' ORDER BY data_emp desc limit 1") ; $sql_update="UPDATE dossie_emprestimo SET data_dev=CURDATE() WHERE id_emp='$id_emp'"; mysqli_query($conexao_bd, $sql_update);  
      quando eu rodo esse código separado no phpmyadmin, funciona normalmente, mas quando coloco no meu código ele não encontra o id_emp.
      id_emp - id de empréstimo, chave primaria com auto incremento.
      data_emp - data que foi realizado o empréstimo.
      cod_cad - código de cadastro, é o código que esta relacionado a tabela de cadastro, é o id do documento. ex: toda vez que o documento "20" for emprestado esse código sera "20".
       
    • Por ConteudoAnimal.com.br
      Eu já agradeço antecipamente por qualquer ajuda ! Sou iniciante em PHP e estou traduzindo meu site de ASP para PHP
       
      Estou com problema no código abaixo a linha 12 que eu coloquei em negrito

      Alguem pode me ajudar

      Código de Erro:

      Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /home/conteud2/public_html/racaseespecies/anfibios/ver.php on line 12
       
      Código PHP/HTML/SQL
       
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html lang="pt-br">
      <head>
      <?php
      include '../../include/meta.php';
      ?>
      <title>
      <?php include '../../include/titulo.php';?></title>
      <link href="/css/estilos.css" rel="stylesheet" type="text/css">
      <?php
      If ($variavel2['id'] <> "") {
          $query = "select id, arquivo, raca from Anfibios where id=$variavel2['id']";
          $result = mysqli_query($connection,$query) or die ("Could not execute query");
          $row = mysqli_fetch_array($result);
          $dados =extract($row);
          $ver ='<link rel="canonical" href="http://www.conteudoanimal.com.br/racaseespecies/anfibios/ver.php?id='.$id.'"';
              }
      else {    $ver ='<link rel="canonical" href="http://www.conteudoanimal.com.br/racaseespecies/anfibios/ver.php?arquivo='.$arquivo.'"';

          echo $ver; 
      If ($variavel2["arquivo"] <> ""){
      echo '<link rel="canonical" href="http://www.conteudoanimal.com.br/racaseespecies/anfibios/ver.php?arquivo='.strtolower(variavel2["arquivo"].' />';
      }
      include '../../include/top.php';
      include '../../include/lateral.php';
      ?>
      <div id="lado_direito">     <br/>
      <a href="http://www.conteudoanimal.com.br/"> Home Page </a>  > <a href="/racaseespecies/racaseespecies.php">Raças & Espécies </a> > <a href="/racaseespecies/anfibios/anfibios.php">Anfíbios</a> > <a href="ver.php?arquivo='<?php echo $arquivo; ?>'"><?php=rs("raca")?> </a></p>
      <?php
      include '../../include/navega.php';
      ?><!--  INICIO --->    
      <h1><?php echo $raca;?></h1><!--  INICIO --->    
      <?php
      ?>
      <center><img src="/racaseespecies/anfibios/<?php echo $arquivo; ?>.jpg" alt="<?php=$arquivo ?>" width="300" height="300" border="0">
      </center>
      <?php echo $animal?> 
      <!-- FIM  -->  
      <?php
      include '../../include/menuinferior.php';
      ?>
      </div>        
      </div>
      <?php
      include '../../include/bottom.php';
      ?>
      </div>
      </body>
      </html>
    • Por ghlevin
      Estou fazendo modificações no site de um cliente, tornando-o responsivo. Tive que fazer várias mudanças de layout que me foram enviadas por um fornecedor e, por causa dessas mudanças, algumas funções Javascript e PHP que eu tinha não funcionam no layout novo.
      Em uma delas, eu tenho dois filtros de data e local (unidade ou empresa). O de data é uma INPUT e o de unidades é um SELECT. Vou colocar o código da view abaixo:
      <form class="rd-mailform text-left" data-form-output="form-output-global" data-form-type="contact" method="post" novalidate="novalidate"> <p class="mobile-hide">Selecione abaixo os par&acirc;metros para visualiza&ccedil;&atilde;o.&nbsp;Se desejar salvar,&nbsp;enviar por e-mail ou imprimir,&nbsp;clique em&nbsp;'Gerar PDF'&nbsp;ou&nbsp;'Gerar Excel'.</p> <!--<div class="range range-xs-center" style="margin: 0px !important;">--> <div class="cell-sm-6"> <div class="form-group form-group-label-outside"> <label class="form-label form-label-outside text-dark rd-input-label" for="data-relatorio">Data</label> <input class="form-control form-control-last-child" id="data-relatorio" type="text" name="first-name" > </div> </div> <div class="cell-sm-6 offset-top-20 offset-sm-top-0"> <div class="form-group form-group-label-outside"> <label class="form-label form-label-outside text-dark rd-input-label" for="comboUnidades"> Unidade </label> <select id="comboUnidades" class="form-control select2-multiple" data-minimum-results-for-search="Infinity"> </select> </div> </div> <div style="width: 100%"> <div style="position: relative; float: left; padding: 5px" onclick="montaPDF()"><a class="btn btn-ellipse btn-java" href="#">GERAR PDF</a></div> <div style="position: relative; float: left; padding: 5px" onclick="montaExcel()" class="mobile-hide"><a class="btn btn-ellipse btn-java" href="#">GERAR EXCEL</a></div> </div> </form> Abaixo parte do código do arquivo JS que mostra como eram carregados esses filtros. O de data usa originalmente uma função datepicker, que não funciona no layout atual. E o das unidades usa uma função AJAX pra colocar todas as opções que vem do banco MySQL do site dentro do select comboUnidades:
      $(document).ready(function(){ showLoading(); var d = new Date(); d.setDate(d.getDate() - 1); $('#data-relatorio').datepicker({ dateFormat: "dd/mm/yy", maxDate: d }); $("#data-relatorio").datepicker('setDate',d); var param = location.href.split("?")[1]; if(typeof param != "undefined" ) { var unidade = param.split('=')[1]; } $.ajax({ async: false, url: '[:raiz]acompanhamentoDiario/getUnidades', dataType: 'json', success: function(data) { if (data.length > 0){ var retorno = ""; for(var i = 0;i < data.length; i++){ retorno += "<option value='"+data[i]['id']+"'>"+data[i]['newnome']+"</option>"; } $('#comboUnidades').html(retorno); if(typeof param != "undefined" ) { $('#comboUnidades option[value='+unidade+']').attr('selected', 'selected'); $('#comboUnidades').trigger('change'); } } else { } } }); $('#data-relatorio').change(function(){ montaTabela(); }); $('#comboUnidades').change(function(){ montaTabela(); }); var d = new Date(); $('#divTabela').hide(); montaTabela(); hideLoading(); }); Essa função chamada no AJAX se encontra num arquivo de Controller:
      public function getUnidades() { $acompanhamento = new AcompanhamentoDiario(); $retorno = $acompanhamento->getUnidadesUsuario(); echo json_encode($retorno); } Por sua vez, essa função do controller chama uma função em PHP que se encontra num arquivo da minha pasta Model do site. Ele traz as unidades do select dependendo do login do usuário:
      public function getUnidadesUsuario() { $idUser = Login::retornaIdUser(); $perfilAcesso = Login::retornaPerfilAcesso(); if(($perfilAcesso == 1) || ($perfilAcesso == 6)) { // Colocado o perfil 6 do Usuário de Demonstração /* se perfil de usuairo = 1*/ $sql = "SELECT u.*,concat(e.sigla,' - ',u.nome) as newnome"; $sql .= " FROM unidade u INNER JOIN cidade c ON u.CIDADE = c.id INNER JOIN estado e ON u.ESTADO = e.id"; $sql .= " join usuario_unidade uu on (uu.id_unidade = u.id)"; $sql .= " WHERE u.ind_unidade_ativa = 1 AND u.ind_predio_novo = 0"; $sql .= " and uu.id_usuario = $idUser and lower(uu.ind_tipo_investidor) != 'c' ORDER BY newnome ASC"; } elseif($perfilAcesso == 2) { /* se perfil de usuairo = 2*/ $sql = "SELECT u.*,concat(e.sigla,' - ',u.nome) as newnome"; $sql .= " FROM unidade u INNER JOIN cidade c ON u.CIDADE = c.id INNER JOIN estado e ON u.ESTADO = e.id"; $sql .= " join administrador adm on (adm.id_unidade = u.id)"; $sql .= " WHERE u.ind_predio_novo = 0"; $sql .= " and adm.id_usuario = $idUser and adm.id_usuario NOT IN (3124,4378)"; $sql .= " ORDER BY newnome ASC"; } else { /* se perfil de usuario = 3*/ $sql = "SELECT u.*,concat(e.sigla,' - ',u.nome) as newnome"; $sql .= " FROM unidade u INNER JOIN cidade c ON u.CIDADE = c.id INNER JOIN estado e ON u.ESTADO = e.id"; $sql .= " WHERE u.ind_predio_novo = 0 ORDER BY newnome ASC"; } $res = parent::executaQuery($sql); return $res; } A função montaTabela(), por ora, ainda não quero modificar, por isso não vou mostrar como ela é. Ela é executada na página dependendo da mudança dos filtros. Por ora, eu só queria saber como "popular" o select comboUnidades e como funcionar o filtro de data data-relatorio de forma semelhante ao datePicker.
×

Informação importante

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