PRECISO DE AJUDA CONTAS DE HORAS
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.
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.
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....
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....
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
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
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
[Ô]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
O que você vai fazer é usar o objeto TimeSpan, subtraindo dois objetos DateTime:
Esses valores de data e hora podem ser definidos também assim:
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
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
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
so pra ver como estava fiz pra testar usando seu código...
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....
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....
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.
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?
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?
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?
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.
Tópico encerrado , respostas não são mais permitidas