Diferença entre 2 horarios Mysql/PHP

1,271 views
Skip to first unread message

abelardo oliveira

unread,
Mar 22, 2013, 4:02:15 PM3/22/13
to php-b...@googlegroups.com
Pessoal, precisando fazer o seguinte

1-22/03/2013 , às 13:00 é iniciado um evento , as 24/03/2013 às 09:00 o evento termina, como eu faço para fazer a soma das horas, mas obedecendo o horario de trabalho

Exemplo, de 08:00 às 18:00 , depois desse intervalo ele nao contaria, tem algo nativo?

Guilherme Medeiros

unread,
Mar 22, 2013, 4:03:11 PM3/22/13
to php-b...@googlegroups.com
véi
não entendi nada
:(


Atenciosamente,

 

Guilherme Medeiros

Web Developer FTW!!!

www.FReNeTiC.com.br

Socialize: LinkedIn Twitter


--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para php-brasil+...@googlegroups.com.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 


Keldnner Bader

unread,
Mar 22, 2013, 4:07:41 PM3/22/13
to php-b...@googlegroups.com
--
Att,
Keldnner Bader
(41) 9848-0746 [Tim]
(41) 8857-8187 [Claro]

Eduardo Kraus

unread,
Mar 23, 2013, 1:54:55 AM3/23/13
to php-brasil
Via MySql você não faz nativo....

Após fazer o SELECT, faça um FOR e calcule dia a dia quantas horas foram trabalhadas.

FOREACH( $dias as $dia )
{
  Dia 22  == 5 
  Dia 23 == 10??? tem folga para almoço
  Dia 24 == 1
}
Soma == 16 horas
Em 22 de março de 2013 17:02, abelardo oliveira <abelard...@gmail.com> escreveu:

--

Cassiano Ricardo Mourão

unread,
Mar 23, 2013, 8:08:16 AM3/23/13
to php-b...@googlegroups.com
Pelo que entendi ele quer o seguinte:
 
Entrada 22/03/2013 10:00:00
Saída   24/03/2013  09:00:00
 
Disso, ele quer quantas horas ao todo (diferença), desde que no período comercial, isto é, de 08:00 às 18:00.
 
"Nativamente" não tem como se fazer. Terá que ser feito "natoralmente" mesmo.
 
Sugiro salvar dia a dia a entrada e a saída. Se virar o dia sem uma saída, será inserido automaticamente 23:59:59 como saída e 00:00:01 (do outro dia) como entrada. Daí fica fácil.

Carlos Henrique Fructuoso de Moraes Rodrigues

unread,
Mar 23, 2013, 9:40:14 AM3/23/13
to php-b...@googlegroups.com
Nativametne no Mysql existe o DATADIFF()


Via Php vc terá que converter a data em http://php.net/manual/pt_BR/function.mktime.php

espero ter ajudado.

------------------------------------------------------------------
Favor confirmar o recebimento deste e-mail,

Carlos H. Fructuoso de M. Rodrigues


Em 23 de março de 2013 02:54, Eduardo Kraus <eduard...@gmail.com> escreveu:

Eduardo Kraus

unread,
Mar 23, 2013, 6:04:52 PM3/23/13
to php-brasil
O datediff não calcula com intervalos de horas definidos dia a dia. Ele apenas calcula de uma data até a outra quanto tempo corrido se passou.

Murilo Biassio Rosa

unread,
Mar 23, 2013, 6:19:27 PM3/23/13
to php-b...@googlegroups.com
Eu uso assim no mysql 
SELECT HOUR(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(data_final,data_inicial))))) AS carga_horaria FROM ...
--
Att, 
Murilo Rosa . Net
http://www.murilorosa.net
+554288010692
skype: murilobiassio
msn: con...@murilorosa.net

Carlos Henrique Fructuoso de Moraes Rodrigues

unread,
Mar 23, 2013, 6:22:15 PM3/23/13
to php-b...@googlegroups.com
quando é assim utilizo o mktime para converter as duas datas em segundos dai comparo a diferença das duas.



-------------------------------------------------------------------

Favor confirmar o recebimento deste e-mail,

Carlos H. Fructuoso de M. Rodrigues



Maicon Rafael

unread,
Mar 24, 2013, 5:40:55 AM3/24/13
to php-b...@googlegroups.com
O que o Kraus falou está correto, 

o TIMEDIFF vai trazer a diferença entre as datas, todavia você terá que tratar as horas não consideradas úteis.

Lembrando que não adianta subtrair horas não úteis de um dia se a tarefa começou naquele dia.

O dia que a tarefa começou você não pode descontar as horas antes das 08:00

Exemplo se a tarefa começou ontem 09:00 AM você deve descontar hora do almoço e pós 18:00 e se ela terminar hoje 03:00 PM (15:00) você desconta as horas antes das 08:00 e a hora do almoço.

Então você trata dia de início e dia final da tarefa pois terão horas que não úteis diferenciadas.

Eu faria algo semelhante ao abaixo:

$horas_dia_inicio + $horas_dia_final + (($dias_trabalhados - 2) * horas_uteis_dia_normal)

Lembrando que isso se estiver tratando apenas de horário trabalhado. Se for algo para gerência de projeto ou calcular rendimento o conceito é bem diferente.

Define bem o que quer antes de iniciar o código.

Função abaixo deve lhe ajudar na tarefa se quiser fazer direto pelo PHP o cálculo, porém ainda terá de reduzir as horas conforme explicado acima.

function diferenca_tempo($data1, $data2, $tipo='H'){
  //$data1 = "01/05/2012 08:00:01";
  //$data2 = "01/05/2013 08:00:03";
  if(!$data1 || !$data2) return false;
  for($i=1;$i<=2;$i++){
    ${"dia".$i} = substr(${"data".$i},0,2);
    ${"mes".$i} = substr(${"data".$i},3,2);
    ${"ano".$i} = substr(${"data".$i},6,4);
    ${"horas".$i} = substr(${"data".$i},11,2);
    ${"minutos".$i} = substr(${"data".$i},14,2); 
    ${"segundos".$i} = substr(${"data".$i},17,2);
  }
  
  $segundos = @mktime($horas2,$minutos2,$segundos2,$mes2,$dia2,$ano2) -@mktime($horas1,$minutos1,$segundos1,$mes1,$dia1,$ano1);
  switch($tipo){
   case "H": $difere = @$segundos/60/60; break;
   case "D": $difere = @$segundos/86400; break;
   case "S": $difere = @$segundos; break;
  }
  return $difere;
}

*Obs: Não tenho os créditos da função :/  acho que ela já rolou aqui na lista


  MAICON RAFAEL

Kinn Coelho Julião

unread,
Mar 24, 2013, 12:14:28 PM3/24/13
to php-b...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages