PRECISO DE AJUDA CONTAS DE HORAS

ELMO01 25/07/2017 21:07:30
#475407
Oi pessoal,

Estou retomando um projeto de cálculos de horas e esbarrei um velho dilema meu, quando o funcionários faz o seguinte horário 18:00 as 22:00 e 23:00 as 05:00AM como faço as contas de horas noturnas.

Se alguém tiver uma função já pronta e puder me passar ficarei grato pois o meu tempo e escasso para ficar tentando fazer uma função para issso.

Obrigado.
NICKOSOFT 25/07/2017 22:11:53
#475409
se controla horário de funcionário, vc deve ter o dia tmb, se tem dia e hora, vc pode usar datediff, e obter o valor de horas entre um momento e outro....
se quer obter valores em $$ pro todo trabalhado, aplique datediff do inicio ao inicio do período noturno, e do inicio do período noturno ao fim do período noturno, e assim sucessivamente até fechar o intervalo trabalhado...
vai q entrou as 06 da manha pra sair as 18, mas o outro plantonista faltou e virou das 06 as 06, ai vai q das 06 as 22 é normal, mas das 22 as 6 é noturno...aplique o datediff entre a troca dos períodos....
PAULOOLIVEIRA 26/07/2017 08:40:07
#475415
Veja se ajuda...

esta é uma forma de calcular o tempo de permanencia em um sistema de estacionamento... tenta adaptar pra vc

mdia = 0
mdia = CDate(txtdatasaida.Text) - CDate(txtdata.Text)
tempo = [Ô][Ô]
auxminutos = [Ô][Ô]
auxminutos = DateDiff([Ô]n[Ô], txthora.Text, txthorasaida.Text)
If mdia > 0 Then
auxminutos = Val(auxminutos) + ((86400 / 60) * mdia)
End If
tempo = Format(Int(auxminutos / 60), [Ô]00[Ô]) & Format(auxminutos Mod 60, [Ô]00[Ô])
txtpermanencia.Text = 0
txtpermanencia = Format(tempo, [Ô]00:00[Ô])



blz
ELMO01 26/07/2017 08:43:45
#475416
Bom dia NICKOSOFT, obrigado por ter respondido. Tenho esta função abaixo mais quando é horários noturnos me gera um erro:

[Ô]O VALOR ADICIONADO OU SUBTRAÍDO RESULTA EM UM DATATIME NÃO REPRESENTÁVEL.
NOME DO PARÂMENTRO: VALUE[Ô]


Não estou conseguindo retirar este erro que aparece. será que você pode me dar uma ajuda nesta nesta função??

Se alguém também tiver uma função melhor e que deseja compartilhar, estou aberto a sugestões.


Function CalcExtNot(ByVal entrada As DateTime, ByVal saida As DateTime) As DateTime
Dim dblHora As Double
Dim dblMinutos As Double
Dim dblTemp As Double
[ô]TextBox1.Text = [Ô]05/10/2010 08:30:00[Ô]
[ô]TextBox1.Text = [Ô]05/10/2010 17:59:00[Ô]
dblTemp = DateDiff([Ô]N[Ô], entrada, saida)
dblHora = CLng(dblTemp / 60)
dblMinutos = dblTemp - dblHora * 60
If dblMinutos < 0 Then
dblMinutos = dblMinutos * -1
End If
Return CStr(dblHora) & [Ô]:[Ô] & CStr(dblMinutos)
End Function

KERPLUNK 26/07/2017 08:56:04
#475418
Resposta escolhida
O que você vai fazer é usar o objeto TimeSpan, subtraindo dois objetos DateTime:

Dim entrada As New DateTime(2017, 7, 26, 8, 15, 0) [ô]entrada as 8:15 de 26/07/2017
Dim saida As New DateTime(2017, 7, 26, 12, 19, 0) [ô]saida as 12:19 de 26/07/2017

Dim periodo As TimeSpan = saida - entrada
[ô]objeto periodo aqui, teria 4 horas e 4 minutos


Esses valores de data e hora podem ser definidos também assim:

Dim entrada As New DateTime(2017, 7, 26, 20, 30, 0) [ô]entrada as 20:30 de 26/07/2017
Dim saida As New DateTime(2017, 7, 27, 6, 0, 0) [ô]saida as 06:00 de 27/07/2017

Dim periodo As TimeSpan = saida - entrada
[ô]objeto periodo aqui teria 9 horas e 30 minutos

NICKOSOFT 27/07/2017 06:26:07
#475449
ELMO, creio q usando a dica do KERPLUNK, ja ajude ate na questao das conversoes
Em primeiro momento pensei no datediff, mas entraria as conversoes, teria q usar o ultimo memento-primeiro, e pedindo a menor unidade e converter tudo
NICKOSOFT 27/07/2017 08:19:23
#475452
so pra ver como estava fiz pra testar usando seu código...
  
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim entrada As DateTime
Dim saida As DateTime
entrada = CDate(TextBox1.Text)
saida = CDate(TextBox2.Text)
MessageBox.Show(CalcExtNot(entrada, saida))

End Sub

Function CalcExtNot(ByVal entrada As DateTime, ByVal saida As DateTime) As DateTime
Dim dblHora As Double
Dim dblMinutos As Double
Dim dblTemp As Double
[ô]TextBox1.Text = [Ô]05/10/2010 08:30:00[Ô]
[ô]TextBox1.Text = [Ô]05/10/2010 17:59:00[Ô]
dblTemp = DateDiff([Ô]N[Ô], entrada, saida)
dblHora = CLng(dblTemp / 60)
dblMinutos = dblTemp - dblHora * 60
If dblMinutos < 0 Then
dblMinutos = dblMinutos * -1
End If
Return CStr(dblHora) & [Ô]:[Ô] & CStr(dblMinutos)
End Function

no text1 e text2 coloquei os valores q estavam comentados, me retornou 09:29:00 certinho, mas fui testar sendo mais de 23horas o intervalo e da erro de conversão, precisaria ampliar o esquema de conversão pra englobar dia....
ELMO01 27/07/2017 21:09:52
#475473
NICKOSOFT este que é o problema como ampliar o esquema de conversão pra englobar dia, ai é que estou com problemas já tentei fazer de alguns modos mais não deu certo.
ELMO01 27/07/2017 21:31:03
#475476
KERPLUNK estava olhando o exemplo que vc postou e ai me surgiu a dúvida, se o colaborador fizer este horário: 08:00 / 12:00 e 13:00 / 01:00 como o seu exemplo trataria as horas, pois sabemos que passou das 00:00:01 já é o dia seguinte?
ELMO01 27/07/2017 21:36:13
#475477
Pessoal tem como transformar os horários?

Exemplo se o colaborador marcar o seu horário 08:00/12:00 e 13:00 as 01:00

Tem como transformar 01:00PM para 13:00AM?
KERPLUNK 27/07/2017 21:44:12
#475478
Repare bem que um objeto DateTime, contém data e hora. O calculo é feito de forma automática e não importa os dados. O .NET é esperto o suficiente para levar em consideração todos os dados de cada objeto DateTime no momento de qualquer cálculo. Ele faz a diferença entre um objeto e outro e pronto, você terá um objeto TimeSpan contendo o número de horas, minutos e segundos. Simples assim. Veja aqui um fiddle exemplificando isso.
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas