Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gilberto Jr

Convertendo data e hora no mysql

Recommended Posts

Boa tarde;

 

Eu tenho o campo na minha tabela: HORARIO_CHEGADA e HORARIO_SAIDA.

 

Gostaria de converter essa data e fazer a subtração ou seja fazer cálculos matemáticos com essas datas.

 

Subtrair e Soma com esses campos.

 

Queria fazer o seguinte

ponto.png
Fazer a subtração da hora de saída menos a hora de chegada dai eu teria a hora trabalhada no dia.
Tento o total da hora trabalhada no dia eu faço a soma do período e faça a soma do horário da jornada.
A principio a string ficou dessa forma
set rs = conn.execute("select sum(horario_chegada-horario_chegada) as totalhora, sum(jornada) as totaljornada from registro")
 
if rs("totalhora") > rs("jornada") then
 response.write("hora extra")
elseif rs("totalhora")<rs("jornada") then
 response.write("atraso")
elseif rs("totalhora")=rs("jornada") then
 response.write("Sem atraso e hora extra")
end if
É possível fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc pode fazer isso também direto na SQL, use o datediff(), no mysql use datediff também.

 

exemplo:

 

<%

TotalSegundos = datediff("s", "18:33:58", "19:34:09")

HoraManha = SegundoParaHora(TotalSegundos)

response.write HoraManha

Public Function SegundoParaHora(segs)

 Dim Segundos
 Dim Minutos
 Dim Horas
 
 Horas = segs \ 3600
 Minutos = (segs mod 3600) \ 60
 Segundos = (segs mod 3600) mod 60
 
 SegundoParaHora = Horas & ":" & Minutos & ":" & Segundos

End Function

e aquele exemplo de DateDiff, altera ele

 

DATA1 = Cdate(Now()) 'DATA ATUAL
DATA2 = Cdate(FINALIZA) 'DATA FINALIZAÇÃO
DIAS = DateDiff("d",DATA1,DATA2)
If DateDiff("h",DATA1,DATA2) <> 0 Then
HORA = DateDiff("h",DATA1,DATA2) - Cint(DIAS) * 24
Else
HORA = 0
End If
If DateDiff("n",DATA1,DATA2) <> 0 Then
MINUTO = DateDiff("n",DATA1,DATA2) - DateDiff("h",DATA1,DATA2) * 60
Else
MINUTO = 0
End If
If DateDiff("s",DATA1,DATA2) <> 0 Then
SEGUNDO = DateDiff("s",DATA1,DATA2) - DateDiff("n",DATA1,DATA2) * 60
Else
SEGUNDO = 0
End If
If SEGUNDO < 0 Then
MINUTO = MINUTO - 1
SEGUNDO = 60 - SEGUNDO + SEGUNDO * 2
End If
If MINUTO < 0 Then
HORA = HORA - 1
MINUTO = 60 - MINUTO + MINUTO * 2
End If
If HORA < 0 Then
DIAS = DIAS - 1
HORA = 24 - HORA + HORA * 2
End If
If DIAS > 1 Then
Response.Write "<font color=#003366 class=fontsize>" & DIAS & "d " & HORA & "h </font>"
ElseIf DIAS = 1 Then
Response.Write "<font color=#FF0000 class=fontsize>" & DIAS & "d " & HORA & "h </font>"
ElseIf DIAS = 0 AND HORA > 0 Then
Response.Write "<font color=#FF0000 class=fontsize>" & HORA & "h " & MINUTO & "m </font>"
ElseIf DIAS = 0 AND HORA = 0 AND SEGUNDO > 1 Then
Response.Write "<font color=#FF0000 class=fontsize>" & MINUTO & "m " & SEGUNDO & "s </font>"
End If
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei usar o datediff no meu select e deu erro

 

 

select datediff(horario_chegada) from registro

 

Incorrect parameter count in the call to native function 'datediff'

 

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz os testes com os paramentros que você passou.

Se eu usar o codigo

 

SELECT DATEDIFF('2014-03-05 17:31:33','2014-03-05 08:06:33') AS DiffDate from registro where data>='20140228' and data<='20140228'

o resultado é

NULL

E se eu usar assim

 

SELECT DATEDIFF('2014-03-07 17:31:33','2014-03-06 08:06:33') AS DiffDate from registro where data>='20140228' and data<='20140228'

o resultado é

1

 

Gostaria que dentro no lugar do resultado 1 mostrasse a diferença entre horas.

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui esse código aqui

select sec_to_time(sum(TIME_TO_SEC(jornada))) as jornada from registro where data between '20140203' and '20140204' and registro.matricula='04713'

 

Ele mostra a quantidade de horas da jornada que é do periodo 03/02/2014 até 04/02/2014. Porem se eu colocar o periodo com o intervalo de 3 dias ou mais da erro.

 

select sec_to_time(sum(TIME_TO_SEC(jornada))) as jornada from registro where data between '20140203' and '20140205' and registro.matricula='04713'

 

aparece esse erro

Total: erro '80020009'
/sistemaponto/admin/relatorio.asp, linha 281

 

O que tem na linha 281 é

 

linha 280: set testea = conn.execute("select sec_to_time(sum(TIME_TO_SEC(jornada))) as jornada from registro where data between '20140203' and '20140206' and registro.matricula='04713'")
 
linha 281: response.Write(testea("jornada"))

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se esta usando se você estiver usando um MEMO, TEXT ou VARCHAR (> 255)

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o resultado do response.Write na SQL ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui, depois de quebrar muito a cabeça de como resolver consegui.

 

Segue o codigo caso alguem tem alguma necessidade.

 

 

<%
set ultimoponto = conn.execute("select registro.dia_semana as dia_semana, registro.feriado as feriado, registro.sigla_registro as sigla, usuario.nome as nome, registro.data as data, registro.horario_chegada as horario_chegada,registro.horario_saida as horario_saida, registro.matricula as matricula from registro as registro inner join usuario as usuario on usuario.matricula=registro.matricula where registro.data between '"&mask_dataa(request.Form("datainicio"))&"' and '"&mask_dataa(request.Form("datafim"))&"' and registro.matricula='"&request.Form("matricula")&"'")
%>
<table style="font-family:Calibri; font-size:13px; width:1000px; margin:auto;" border="1">
  <tr>
    <td>Nome</td>
    <td>Matricula</td>
    <td>Dia Semana</td>
    <td>Feriado</td>
    <td>Entrada</td>
    <td>Saida</td>
    <td>Hora Trabalhada</td>
    <td>Extra</td>
    <td>Atraso</td>
    <td>Observação</td>
    <td>Extra 100%</td>
    <td>Falta</td>
  </tr>
<%
 
while ultimoponto.eof = false
 
DATA1 = Cdate(right(ultimoponto("horario_chegada"),8)) 'DATA ATUAL
DATA2 = Cdate(right(ultimoponto("horario_saida"),8)) 'DATA FINALIZAÇÃO
DIAS = DateDiff("d",DATA1,DATA2)
If DateDiff("h",DATA1,DATA2) <> 0 Then
HORA = DateDiff("h",DATA1,DATA2) - Cint(DIAS) * 24
Else
HORA = 0
End If
If DateDiff("n",DATA1,DATA2) <> 0 Then
MINUTO = DateDiff("n",DATA1,DATA2) - DateDiff("h",DATA1,DATA2) * 60
Else
MINUTO = 0
End If
If DateDiff("s",DATA1,DATA2) <> 0 Then
SEGUNDO = DateDiff("s",DATA1,DATA2) - DateDiff("n",DATA1,DATA2) * 60
Else
SEGUNDO = 0
End If
If SEGUNDO < 0 Then
MINUTO = MINUTO - 1
SEGUNDO = 60 - SEGUNDO + SEGUNDO * 2
End If
If MINUTO < 0 Then
HORA = HORA - 1
MINUTO = 60 - MINUTO + MINUTO * 2
End If
If HORA < 0 Then
DIAS = DIAS - 1
HORA = 24 - HORA + HORA * 2
End If
 
if HORA<9 then
HORA = "0"&HORA
end if
 
if MINUTO<9 then
MINUTO = "0"&MINUTO
end if
 
if SEGUNDO<9 then
SEGUNDO = "0"&SEGUNDO
end if
 
If DIAS = 0 AND HORA > 0 Then
HORAEXTRA = HORA & ":" & MINUTO & ":" & SEGUNDO
ElseIf DIAS = 0 AND HORA = 0 AND SEGUNDO > 1 Then
HORAEXTRA = HORA & ":" & MINUTO & ": " & SEGUNDO
End If
 
JORNADA = CDate("09:00:00")            
TRABALHADA = CDate(HORAEXTRA)
%>
 
  <tr>
    <td><%=ultimoponto("nome")%></td>
    <td><%=ultimoponto("matricula")%></td>
    <td><%=formatdatetime(ultimoponto("data"),1)%></td>
    <td><%=ultimoponto("feriado")%></td>
    <td>
<%
if formatdatetime(ultimoponto("horario_chegada"),3) = "00:01:00" then
response.Write("00:00:00")
else
response.Write(formatdatetime(ultimoponto("horario_chegada"),3))
end if
%>
    </td>
    <td>
<%
if formatdatetime(ultimoponto("horario_saida"),3) = "09:01:00" then
response.Write("00:00:00")
else
response.Write(formatdatetime(ultimoponto("horario_saida"),3))
end if
%>
</td>
    <td><%
if CDate(CDate(DATA2) - CDate(DATA1)) = CDate("09:00:00") then
response.Write("00:00:00")
else
response.Write(CDate(CDate(DATA2) - CDate(DATA1)))
end if
%></td>
    <td>
    <%
IF TRABALHADA = JORNADA THEN
RESPONSE.Write("00:00:00")
ELSEIF TRABALHADA < CDATE(JORNADA) THEN
RESPONSE.Write("")
ELSEIF TRABALHADA > JORNADA THEN
response.Write(CDate(CDate(TRABALHADA) - CDate(JORNADA)))
END IF
%>
    </td>
    <td>
    <%
IF ultimoponto("dia_semana") = "DOM" or ultimoponto("dia_semana") = "SAB" or ultimoponto("feriado") <> "" then
 
response.Write("")
 
else
 
IF TRABALHADA = JORNADA THEN
RESPONSE.Write("")
ELSEIF CDATE(DATA1) = CDATE(DATA2) THEN
RESPONSE.Write("")
ELSEIF TRABALHADA < CDATE(JORNADA) THEN
response.Write("-"&CDate(CDate(JORNADA) - CDate(TRABALHADA)))
END IF
 
end if
%>
    </td>
    <td>
    </td>
    <td>
    <%
IF DATA1 <> cdate("00:01:00") and DATA2 <> cdate("09:01:00") and ultimoponto("dia_semana") = "DOM" then
response.Write(TRABALHADA)
elseIF DATA1 <> cdate("00:01:00") and DATA2 <> cdate("09:01:00") and ultimoponto("dia_semana") = "SAB" then
response.Write(TRABALHADA)
elseIF DATA1 <> cdate("00:01:00") and DATA2 <> cdate("09:01:00") and ultimoponto("feriado") <> "" then
response.Write(TRABALHADA)
end if
%>
    </td>
    <td>
    <%
IF ultimoponto("dia_semana") = "DOM" or ultimoponto("dia_semana") = "SAB" or ultimoponto("feriado") <> "" or DATA1 <> cdate("00:01:00") or DATA2 <> cdate("09:01:00") THEN
RESPONSE.Write("")
elseIF ultimoponto("dia_semana") <> "DOM" or ultimoponto("dia_semana") <> "SAB" or ultimoponto("feriado") <> "" and formatdatetime(ultimoponto("horario_chegada"),3) = cdate("00:01:00") and formatdatetime(ultimoponto("horario_saida"),3) = cdate("09:01:00") THEN
response.Write("faltou")
END IF
%>
    </td>
  </tr>
<%
ultimoponto.movenext
wend
%>
  <tr>
    <td colspan="12" align="center">
      <%
set verificahoraextra = conn.execute("select TIME_TO_SEC(timediff(sec_to_time(sum(TIME_TO_SEC(horario_saida))),sec_to_time(sum(TIME_TO_SEC(horario_chegada))))) as horatrabalhada,sum(TIME_TO_SEC(jornada)) as jornada from registro where data between '"&mask_dataa(request.Form("datainicio"))&"' and '"&mask_dataa(request.Form("datafim"))&"' and registro.matricula='"&request.Form("matricula")&"' and dia_semana not in ('SAB','DOM') and horario_chegada!='00:01:00' and horario_saida!='09:01:00'")
 
 
set horaextra = conn.execute("select timediff(sec_to_time(sum(TIME_TO_SEC(horario_saida))),sec_to_time(sum(TIME_TO_SEC(horario_chegada)))) as horatrabalhada, sec_to_time(sum(TIME_TO_SEC(jornada))) as jornada, timediff(timediff(sec_to_time(sum(TIME_TO_SEC(horario_saida))),sec_to_time(sum(TIME_TO_SEC(horario_chegada)))), sec_to_time(sum(TIME_TO_SEC(jornada)))) as horaextra from registro where data between '"&mask_dataa(request.Form("datainicio"))&"' and '"&mask_dataa(request.Form("datafim"))&"' and registro.matricula='"&request.Form("matricula")&"' and dia_semana not in ('SAB','DOM') and horario_chegada!='00:01:00' and horario_saida!='09:01:00'")
 
set funcionario = conn.execute("select * from usuario where matricula='"&request.Form("matricula")&"'")
 
if Cdbl(verificahoraextra("jornada")) > Cdbl(verificahoraextra("horatrabalhada")) then
response.Write("O funcionario '"&funcionario("nome")&"' teve "&Cdate(right(horaextra("horaextra"),8))&" de Hora Extra")
elseif Cdbl(verificahoraextra("jornada")) < Cdbl(verificahoraextra("horatrabalhada")) then
response.Write("O funcionario '"&funcionario("nome")&"' teve "&Cdate(right(horaextra("horaextra"),8))&" de Atraso")
end if
 
%>
<%
set verificahoracemporcento = conn.execute("select TIME_TO_SEC(timediff(sec_to_time(sum(TIME_TO_SEC(horario_saida))),sec_to_time(sum(TIME_TO_SEC(horario_chegada))))) as horatrabalhada,sum(TIME_TO_SEC(jornada)) as jornada from registro where data between '"&mask_dataa(request.Form("datainicio"))&"' and '"&mask_dataa(request.Form("datafim"))&"' and registro.matricula='"&request.Form("matricula")&"' and dia_semana in ('SAB','DOM') and horario_chegada!='00:01:00' and horario_saida!='09:01:00'")
 
set horacemporcento = conn.execute("select timediff(sec_to_time(sum(TIME_TO_SEC(horario_saida))),sec_to_time(sum(TIME_TO_SEC(horario_chegada)))) as horatrabalhada, sec_to_time(sum(TIME_TO_SEC(jornada))) as jornada, timediff(timediff(sec_to_time(sum(TIME_TO_SEC(horario_saida))),sec_to_time(sum(TIME_TO_SEC(horario_chegada)))), sec_to_time(sum(TIME_TO_SEC(jornada)))) as horaextra from registro where data between '"&mask_dataa(request.Form("datainicio"))&"' and '"&mask_dataa(request.Form("datafim"))&"' and registro.matricula='"&request.Form("matricula")&"' and dia_semana in ('SAB','DOM') and horario_chegada!='00:01:00' and horario_saida!='09:01:00'")
 
 
response.Write(" e "&Cdate(right(horacemporcento("horatrabalhada"),8))&" hora extra 100%")
 
 
%>    </td>
    </tr>
</table>

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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