Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Somar horas acima de 24h


Rodrigo_Linhas

Pergunta

Olá estou em uma dificuldade, não estou conseguindo calcular os horarios acima de 24h, preciso que ele me calcule o total de horas, por exemplo, 210:00:00!

A Coluna do banco esta como hora e data

Segue o Código abaixo:

rs.open "select SUM (manhaentrada) as total from horario WHERE id='"&Request("id")&"'"

<%=FormatDateTime(rs("total"),3)%>

Já tentei usar mascaras mas também não deram certo!

Espero que possam me ajudar!

Editado por Rodrigo_Linhas
Link para o comentário
Compartilhar em outros sites

20 respostass a esta questão

Posts Recomendados

  • 0

já tentei com este código abaixo e também não esta dando certo ele da o resultado de 1:36:0: sendo que que eu preciso que ele apareça 391:36:00 que é a soma certa, agora se eu tiro a formatação FormatDateTime ele fica 7,33333333333333

<%
totalTempo = "0"

'Aqui entra as vareáveis
Entrada = ""&FormatDateTime(rs("total"),3)&""

Entrada2 = ""&FormatDateTime(rs2("total"),3)&""

'pega a diferença em minutos
Manha = DateDiff("s",Entrada,Saida)
Tarde = DateDiff("s",Entrada2,Saida2)


'Faz a somatória dos minutos
totalTempo = Manha + Tarde

'separa horas:minutos do total
segundos = (totalTempo) Mod 60
minutos = ((totalTempo - segundos) / 60) mod 60
horas = int((totalTempo) / 3600)

TempoCompleto = (horas & ":" & minutos & ":" & segundos & ":")
%>

De que forma tenho que fazer isso, já pesquisei o forum de ponta a ponta e não achei nada conforme minha necessidade???

Editado por Rodrigo_Linhas
Link para o comentário
Compartilhar em outros sites

  • 0

Olha eu não sei o que esta dando de errado, a conta era pra dar o resultado de 391:36:00 e esta dando 190,25, fiz certinho como você colocou acima!

Será que este Between esta atrapalhando, é que minha necessidade é que eu selecione as datas e ele some os horarios da data selecionada!

"select SUM (((Hour(ponto.manhaentrada)*60)+(Minute(ponto.manhaentrada)))/60) as SomaHora from ponto WHERE id='"&Request("id")&"' AND Data BETWEEN #"&formatadata(request.form("datainicial"))&"# AND #"&formatadata(request.form("datafinal"))&"#"

Link para o comentário
Compartilhar em outros sites

  • 0

fiz uma conversao daquela funcao pra asp, mas não testei:

Function MontaHora(Seg)
    Dim Hor, Min
    
    If Seg < 0 Then
        MontaHora = "- "
        Seg = Abs(Seg)
    Else
        MontaHora = ""
    End If
    
    Hor = Seg \ 3600
    Seg = Seg - (Hor * 3600)
    
    Min = Seg \ 60
    Seg = Seg - (Min * 60)
    
    MontaHora = MontaHora & Hor & ":"
    If Len(Trim(Min)) = 1 Then
        MontaHora = MontaHora & "0"
    End If
    MontaHora = MontaHora & Min
    If Len(Trim(Seg)) = 1 Then
        MontaHora = MontaHora & "0"
    End If
    MontaHora = MontaHora & Seg
End Function[/code]

é só você chama-la passando o valor em segundos como parametro q ele deve resolver.

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa o resultado saiu assim Kuroi 0:0016,3166666666667, acho que vou começar do zero e explicar tudo!

Minha necessidade é de somar horarios de um funcionário atrazes de uma pesquisa, preciso que some os horarios só no periodo que eu selecionei,

Tenho uma pagina que faz uma pesquisa por data, ex. 20/05/2011 á 20/06/2011.

E essa pagina é a Pesquisa.asp

Ela tem a action do formulario como action="pesquisar.asp?id=<%=rs("id")%> com a id do funcionário, bom até aqui esta tudo ok com esta página

AGORA A PÁGINA DE RESULTADOS QUE ESTA DANDO PROBLEMA NAS SOMAS!

Resultados.asp?id=blablabla

rs2.open "select SUM (((Hour(ponto.manhaentrada)*60)+(Minute(ponto.manhaentrada    )))/60) as SomaHora from ponto WHERE id='"&Request("id")&"' AND Data BETWEEN #"&formatadata(request.form("datainicial"))&"# AND #"&formatadata(request.form("datafinal"))&"#"

Meu Banco de Dados!

TEBELAS

funcionarios: id,nome

ponto: id, data, manhaentrada, manhasaida

só que os resultados não tem nada haver

Link para o comentário
Compartilhar em outros sites

  • 0

a funcao q passei faz o seguinte: você passa um valor em segundos e ele mostra formatado.

exemplo, você passa 100 segundos, ele mostra 0:01:40 (um minuto e quarenta segundos). você passa 4000 segundos, ele mostra 1:06:40 (uma hora, seis minutos e quarenta segundos).

sendo assim, você consegue mostrar valores acima de 24 horas, o q você não conseguiria usando variaveis do tipo data.

agora tem q ver como você conta as horas do cara, não sei como você ta fazendo isso, e não sei o q você tentou selecionar. se você sabe q o cara trabalhou 25 horas, multiplique por 3600 q você tem o valor em segundos. depois passe para a funcao q ela coloca o formato.

alias, acho q o codigo do DateDiff() q você tentou antes, calculando já em segundos, tinha mais sentido.

EDITADO:

acho q entendi. selecione a entrada e a saida normalmente, faca um while pra ler todos os registros e va somando o DateDiff() numa variavel.

quando terminar o while, passe a variavel para funcao.

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Olha eu fiz uma conta rápida, e assim descobri o problema, acho que agora fica mais facil para me ajudar!!!!

Os códigos acima estão somando certo, o Resultado deu 16,31666667 se eu converter este resultado em horas vai dar 445:00:00

então eu só preciso de um código que converta esses 16,31666667 em horas igual a 445:00:00.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu pequei o total de horas de saida que deu o resultado correto:

rs5.open "select SUM (tardesaida) as total from ponto WHERE id='"&Request("id")&"' AND Data BETWEEN #"&formatadata(request.form("datainicial"))&"# AND #"&formatadata(request.form("datafinal"))&"#"
Peguei o total de horas de entrada que também deu certo:
rs2.open "select SUM (manhaentrada) as total from ponto WHERE id='"&Request("id")&"' AND Data BETWEEN #"&formatadata(request.form("datainicial"))&"# AND #"&formatadata(request.form("datafinal"))&"#"
Ai o que eu fiz, subtrai a saida menos entrada que deu o resultado! ultilizei o código abaixo apara fazer as somas:
<%
'Total de horas Saída
n2 = ""&rs5("total")&""

'Total de horas Entrada
n1 = ""&rs2("total")&""
totalTempo = n2 - n1
soma1 = (totaltempo & "")

%>

Total de horas já somado
<%=Response.Write(soma1)%>

Agora só preciso converter esse resultado para horas conforme eu disse acima, o Resultado deu 16,31666667 se eu converter este resultado em horas vai dar 445:00:00.

Você tem algum código que faz isso Kuroi?

Link para o comentário
Compartilhar em outros sites

  • 0

Ta refiz aqui... testei e funfo..

SELECT 
    Sum(teste.entrada) AS SomaDeentrada, 
    Sum(teste.saida) AS SomaDesaida, 
    ([SomaDesaida]-[SomaDeentrada]) AS SomaTotal, 
    ([SomaTotal]*86400) AS Dias, 
    Round(([Dias] Mod 3600),0) AS Sobra, 
    (([Dias]-[Sobra])/3600) AS Horas, 
    (([Sobra]-([Sobra] Mod 60))/60) AS Minutos, 
    ([Sobra] Mod 60) AS Segundos
FROM teste HAVING 
        (((teste.id)="&Request("id")&") AND ((teste.data) Between #"&formatadata(request.form("datainicial"))&"# And #"&formatadata(request.form("datafinal"))&"#));

Response.write rs("Horas")&":"&rs("Minutos")&":"&rs("Segundos")

Calcula funciona bem, agora não sei como vai ser o desempenho disso... ^^

Link para o comentário
Compartilhar em outros sites

  • 0

valeu bareta, resolvel meu problema só que fico com uma dúvida:

Esse código abaixo é o que você me mandou e da certinho:

SELECT
    Sum(teste.entrada) AS SomaDeentrada,
    Sum(teste.saida) AS SomaDesaida,
    ([SomaDesaida]-[SomaDeentrada]) AS SomaTotal,
    ([SomaTotal]*86400) AS Dias,
    Round(([Dias] Mod 3600),0) AS Sobra,
    (([Dias]-[Sobra])/3600) AS Horas,
    (([Sobra]-([Sobra] Mod 60))/60) AS Minutos,
    ([Sobra] Mod 60) AS Segundos
FROM teste HAVING
        (((teste.id)="&Request("id")&") AND ((teste.data) Between #"&formatadata(request.form("datainicial"))&"# And #"&formatadata(request.form("datafinal"))&"#));
Usei o mesmo código e modifiquei as colunas para fazer outra soma e deu errado, o que será?
SELECT Sum(ponto.tardeentrada) AS SomaEntrada, Sum(ponto.manhasaida) AS SomaSaida, ([SomaEntrada]-[SomaSaida]) AS SomaTotal, ([SomaTotal]*86400) AS Dias, Round(([Dias] Mod 3600),0) AS Sobra, (([Dias]-[Sobra])/3600) AS Horas, (([Sobra]-([Sobra] Mod 60))/60) AS Minutos, ([Sobra] Mod 60) AS Segundos FROM ponto HAVING (((ponto.id)='"&Request("id")&"') AND ((ponto.data) Between #"&formatadata(request.form("datainicial"))&"# And #"&formatadata(request.form("datafinal"))&"#))"

Ele me da esse resultado: 24,9999999999999:0:0

Editado por Rodrigo_Linhas
Link para o comentário
Compartilhar em outros sites

  • 0

Continua na mesma... o primeiro da o resultado certinho cara, mas o segundo já não aparece certo, o que será????

Eu ultilizo os dois códigos na mesma página, será q pode ser isso?

Primeiro Resultado:

143:00:00

rs1.open "select Sum(ponto.tardeentrada) AS SomarEntrada, Sum(ponto.manhasaida) AS SomarSaida, ([SomarEntrada]-[SomarSaida]) AS SomarTotal, ([SomarTotal]*86400) AS Dias, Round(([Dias] Mod 3600),0) AS Sobra, (([Dias]-[Sobra])/3600) AS Horas, (([Sobra]-([Sobra] Mod 60))/60) AS Minutos, ([Sobra] Mod 60) AS Segundos FROM ponto HAVING (((ponto.id)='"&Request("id")&"') AND ((ponto.data) Between #"&formatadata(request.form("datainicial"))&"# And #"&formatadata(request.form("datafinal"))&"#))"
Segundo Resultado: 24,9999999999999:0:0
rs2.open "select Sum(ponto.manhaentrada) AS SomaDeentrada, Sum(ponto.tardesaida) AS SomaDesaida, ([SomaDesaida]-[SomaDeentrada]) AS SomaTotal, ([SomaTotal]*86400) AS Dias, Round(([Dias] Mod 3600),0) AS Sobra, (([Dias]-[Sobra])/3600) AS Horas, (([Sobra]-([Sobra] Mod 60))/60) AS Minutos, ([Sobra] Mod 60) AS Segundos FROM ponto HAVING (((ponto.id)='"&Request("id")&"') AND ((ponto.data) Between #"&formatadata(request.form("datainicial"))&"# And #"&formatadata(request.form("datafinal"))&"#))"

Editado por Rodrigo_Linhas
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...