Ir para conteúdo

POWERED BY:

Arquivado

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

l_nando

[Resolvido] Somar horas

Recommended Posts

Pessoal, boa trade.

 

Voltando a minha dúvida sobre soma de horas, onde tiro a diferença entre horas e somo a valores em reais, esta parte já está resolvida com a ajuda do pessoal aqui do forum, é o seguinte:

 

Valor da 1ª hora = R$ 5,00

Valor da hora adicional = R$ 2,00

 

Se a pessoa permanece no local de 0 a 1h deveria cobrar R$ 5,00 , mas este valor só está sendo cobrado se for exatamente 1h e não menor que isso.

 

 

Se a pessoa permanesse no local mais do que 1h, por exemplo 1h e 20m, deveria cobrar R$ 5,00 e acrescentar a hora adicional R$ 2,00 e na verdade o sistema está cobrando R$ 5,67 ( fracionando hora e valor ) e assim sucessivamente, se ficar 2h15m cobrar os R$ 5,00 da 1ª hora + R$ 2,00 da 2ª hora + R$ 2,00 da 3ª hora.

 

Como faço para arredondar estes minutos para hora cheia.

Por exemplo, se ficar 1h10m arredondar para 2h e assim sucessivamente?

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta como está seu código no momento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, segue abaixo:

 

<% 

'############################################################################
###############################
'*********************************************************
' Função para conversão de horário
' Autor: hargon
' Propósito: Converter Horário em Segundos ou vice-versa
' Data: 02/06/2008
' Fórum: Imasters (www.imasters.com.br/forum)
'*********************************************************

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

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
	
	converteSegundosHorario = horas & ":" & minutos & ":" & segundos
End Function
'############################################################################
###############################

Vahora = "2" ' Valor da hora adicional
Vhorac = "5" ' Valor da primeira hora
Vtxthoraf = request.Form("txthoraf")
Vtxthorae = request.Form("txthorae") 'Hora de entrada
Vtxthoras = request.Form("txthoras") 'Hora de saída
Vtotal = DateDiff("s", Vtxthorae, Vtxthoras)
Vmenoshora = "1:00:00" 'Hora a ser subtraída se o resultado for maior que 1:00:00 h
VCmenoshora = converteHorarioSegundos(Vmenoshora) 'Converte a hora a ser subtraída em segundos
Vmmmhora = Vtotal - VCmenoshora 'Subtrai o resultado do calculo do período da hora a ser subtraída se o resultado for maior que 1:00:00 h em segundos
Vmhora = Vmmmhora / 3600 'Pega o resultado da subtração e divide por 3600 para obter um nº inteiro
Vthora = Vmhora * Vahora + Vhorac 'Multiplica o nº inteiro pelo valor da hora adicional e soma com o valor da 1ª hora



Response.Write "Total de horas = <font size='5px' face='verdana' color='#000066'> " & converteSegundosHorario(Vtotal) & " </font>"
Response.Write "<hr>"
 
response.Write "<br>Valor a pagar = <font size='5px' face='verdana' color='#006600'><b> " & formatcurrency(Vthora)
Response.Write "<hr>" 

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vtxthoraf seria o que?

 

Dê exemplos...

13:00:00 | 17:00:00

 

Isso daria 4 horas normais. Então será pago quantos reais?

 

13:00:00 | 18:25:00

 

Isso daria 1h25 a mais. Então será pago quantos reais normais e quantos extras?

 

Dê esse tipo de exemplo para saber em que resultado temos que chegar em determinada situação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia por exemplo desmenbrar as horas, tipo, tenho um code

que pega por exemplo:

10:00 até 12:00 , se fizer mais horas, por exemplo 10:00 até 14:45

eu calculo das 12:00 até as 14:45, sendo 02:45 e desmembro, tipo:

horas 2

minutos 45

e com esse eu fazia a multiplicacaun do que excedeu, achando o code, posso, disponibilizar aki...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue:

 

Vtxthoraf seria o que?

Esta foi uma varia´vel que criei, mas não usei e esqueci de tira do code.Foi mal.

 

Dê exemplos...

13:00:00 | 17:00:00

 

Isso daria 4 horas normais. Então será pago quantos reais?

 

Seriam pagos 5 reais pela 1ª hora 13:00:00 as 14:00:00 e mais 2 reais para cada hora adicional 14:00:00 as 17:00:00, resultando 6 reais pelas 3 horas adicionais + os 5 reais da 1ª hora = R$ 11.

 

13:00:00 | 18:25:00

 

Isso daria 1h25 a mais. Então será pago quantos reais normais e quantos extras?

 

São 5h25 a mais, então seriam pagos 5 reais pela 1ª hora 13:00:00 as 14:00:00, mais 10 reais das 5 horas adicionais, por exemplo: das 14:00:00 as 18:00:00 são 4 horas e os 25 minutos restantes arredondaria para 1hora resultando 5 horas adicionais = R$ 15,00.

( Só que o sistema está resultando 5:25:00 certinho e cobra 13,83 reais. e eu queria o arredondamento para hora cheia, para não serem cobrados estes centavos. )

 

Valeu!

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso o primeiro exemplo 13:00:00 | 17:00:00 = R$ 11,00. isso está correto então? O problema são as horas quebradas então.

 

Acrescente a função para arredondar:

Function arredondaParaCima(byVal numero)
	If (cLng(numero) < numero) Then
			 numero = cLng(numero) + 1
	Else
			 numero = cLng(numero)
	End If
	arredondaParaCima = numero
End Function
E utiliza nessa linha:

Vmhora = arredondaParaCima(Vmmmhora / 3600)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hargon,

 

fiz o que você disse mas o sist. está somente tirando os 25m transformando em 5 horas e não arredondando para cima deixando com 6 horas, no exemplo de ( 13:00:00 | 18:25:00 ).

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que foi falado anteriormente está correto, pois você não tirou uma hora antes?

 

Nos testes que fiz aqui, chegou aos 15 reais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, hargon!

 

Desculpe minha desatenção e demora para responder o tópico, tive uns probleminhas!

 

 

Muito obrigado pela força!

 

Qualquer outra dúvia posto denovo.

 

 

Valeu mesmo fera!

 

 

Abraço.

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.