Ir para conteúdo

POWERED BY:

Arquivado

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

Carlos 1981

[Resolvido] Problemas

Recommended Posts

Dê um exemplo dos valores utilizados. E se é subtração ou adição

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê um exemplo dos valores utilizados. E se é subtração ou adição

 

Function converteSegundosHorario(segundos)
	Dim minutos, horas
	horas = int(segundos/3600)
	minutos = int((segundos mod 3600) / 60)
	segundos = int((segundos mod 3600) mod 60)
	if len(minutos) < 2 then : minutos = 0 & minutos : end if
	if len(segundos) < 2 then : segundos = 0 & segundos : end if
	response.write(horas) & "<hr>"
	converteSegundosHorario = horas & ":" & minutos & ":" & segundos
End Function

function soma_horarios(byval horario1, byval horario2)

dim h1_segundo, h2_segundo
h1_segundo = converte_segundo(horario1)
h2_segundo = converte_segundo(horario2)

soma_horarios = converteSegundosHorario(h1_segundo + h2_segundo)
end function

function converte_segundo(byval horario)
dim h1, m1, s1
'horario=0
h1 = hour(CDATE(horario)) * 60 * 60 'm, s
m1 = minute(CDATE(horario)) * 60 's
s1 = second(CDATE(horario))

converte_segundo = h1 + m1 + s1
end function

'Subs de escrita
sub metodo_escrita1(byval hor_inicio, byval hor_fim, byval dif)
%>
<table width="250" border="0" cellspacing="0" cellpadding="0">
  <tr>
	<td width="158" align="left" valign="middle">Início do atendimento:</td>
	<td width="92" align="left" valign="middle"><%=hor_inicio%> </td>
  </tr>
  <tr>
	<td align="left" valign="middle">Fim do atendimento:</td>
	<td align="left" valign="middle"><%=hor_fim%> </td>
  </tr>
  <tr>
	<td align="left" valign="middle" style="font-weight:bold;">Total de Horas:</td>
	<td align="left" valign="middle" style="font-weight:bold;"><%=dif%> </td>
  </tr>
</table>
<%
end sub

sub metodo_escrita2(byval dts(), byval dif(), byval totaldif)
%>
<table width="300" border="1" cellspacing="0" cellpadding="0" style="border:1px solid; border-collapse:collapse;">
  <tr>
	<td align="center" valign="middle" style="width:100px; font-weight:bold;">Data</td>
	<td align="center" valign="middle" style="font-weight:bold;">Total de Horas dedicadas</td>
  </tr>
<%
for i = Lbound(dts) to UBound(dts)
%>
  <tr>
	<td align="left" valign="middle"><%=LEFT(dts(i),10)%></td>
	<td align="center" valign="middle"><%=dif(i)%></td>
  </tr>
<%
next
%>
  <tr>
	<td align="left" valign="middle" style="font-weight:bold;">Total</td>
	<td align="center" valign="middle" style="font-weight:bold;"><%=totaldif%></td>
  </tr>
</table>
<%
end sub

tenho que somar os valores de uma listagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso que você informe os valores que você utilizou e ocorreu o erro, pois fiz vários testes aqui e não aconteceu erro algum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso que você informe os valores que você utilizou e ocorreu o erro, pois fiz vários testes aqui e não aconteceu erro algum.

 

funciona assim, ele pega a hora inicial e final do BD e converte em segundos, tira a diferença,

ex: 1:00, 1:30, 7:00 remonta o horario e faz a soma,

funciona perfeitamente se o horário que for somar é menor de 23:59, porem quando ele é maior que 23:59 na hora de montar e somar

ele usa a função abaixo, como tem o comando "hour" ele da pau, e pra piorar esses horarios iniciais que devem ser somados as vezes ele é maior de 23:59

e esses horarios tbm passam pela função abaixo

 

function soma_horarios(byval horario1, byval horario2)

dim h1_segundo, h2_segundo
h1_segundo = converte_segundo(horario1)
h2_segundo = converte_segundo(horario2)

soma_horarios = converteSegundosHorario(h1_segundo + h2_segundo)
end function

function converte_segundo(byval horario)
dim h1, m1, s1
'horario=0
h1 = hour(CDATE(horario)) * 60 * 60 'm, s
m1 = minute(CDATE(horario)) * 60 's
s1 = second(CDATE(horario))

converte_segundo = h1 + m1 + s1
end function

 

 

O que estou tentando fazer?

estou tentando fazer a soma sem passar por essas funções porem o resultado é

 

01:00:00;1:00:00

08:20:00;7:20:00

09:20:00;1:00:00

10:50:00;1:30:00

13:50:00;3:00:00

20:10:00;6:20:00

22:22:00;2:12:00

31/12/1899 00:54:00;2:32:00

31/12/1899 04:24:00;3:30:00

31/12/1899 09:19:00;4:55:00

31/12/1899 13:19:00;4:00:00

31/12/1899 13:19:00;

 

quando ele passa de 23:59 ele reinicia a soma com erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Correto, agora sim entendi o problema. Você está trabalhando com 24:00, 48:00, 60:00, correto?

 

Nesse caso existe o "erro", pois ele trabalha com horário válido de 00:00:00 à 23:59:59. No caso você teria que converter todos os horários em segundos e depois somar tudo de uma vez. E depois converter para horário de novo.

 

Vou estar analisando esse código para possíveis adaptações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se é a melhor alternativa, pois criei aqui rápido. Mas segue abaixo a função converteHorarioSegundos alterada:

Function converteHorarioSegundos(ByVal horario)
	Dim segundos, minutos, horas
	Dim horarioArray
	
	segundos = "00"
	minutos = "00"
	horas = "00"
	
	horarioArray = split(horario,":")
	
	If (uBound(horarioArray) >= 0) Then
		horas = horarioArray(0)
	End If
	If (uBound(horarioArray) >= 1) Then
		minutos = horarioArray(1)
	End If
	If (uBound(horarioArray) >= 2) Then
		segundos = horarioArray(2)
	End If
	
	converteHorarioSegundos = (horas*3600) + (minutos*60) + segundos
End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se é a melhor alternativa, pois criei aqui rápido. Mas segue abaixo a função converteHorarioSegundos alterada:

Function converteHorarioSegundos(ByVal horario)
	Dim segundos, minutos, horas
	Dim horarioArray
	
	segundos = "00"
	minutos = "00"
	horas = "00"
	
	horarioArray = split(horario,":")
	
	If (uBound(horarioArray) >= 0) Then
		horas = horarioArray(0)
	End If
	If (uBound(horarioArray) >= 1) Then
		minutos = horarioArray(1)
	End If
	If (uBound(horarioArray) >= 2) Then
		segundos = horarioArray(2)
	End If
	
	converteHorarioSegundos = (horas*3600) + (minutos*60) + segundos
End Function

 

valeu vou testar aqui e vamos ver o q q da

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei aqui com os valores citados por você e deu certo.

 

Como está seu código agora? Você viu que são duas funções e eu alterei apenas uma? Não é para remover a outra, eu postei só a função que alterei.

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.