PRECISO DE AJUDA CONTAS DE HORAS

NICKOSOFT 28/07/2017 07:53:26
#475486
Citação:

:
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.


da trabalho, mas vai sem problemas, parta da menor unidade q precisa no caso minuto.....
tipo se o calculo do datediff retornar 2200 minuntos....ai vc pode usar muitas logicas, dividir isso em 60 retorna horas, esse valor se for maior q 24, é sinal q tem mais de 1 dia, vc divide por 24, da 1,527...pronto, vc tem 1 dia, e agora essa parte decimal, multiplicada por 24, dará 12, já temos 1 dia e 12 horas, a parte decimal restante multiplica por 60, 40 minutos.....1dia 12horas e 40minutos....

mas sinceramente é muito trabalho, a sugestão do kerplunk te poupa muito disso.....vc tem coisas prontas q te poupam horas de logica....essa conversão q fiz assim, tem N formas de serem feitas....vc fez de horas pra chegar aos minutos, nada impede q vc parta de dias pra minutos tmb, o sentido inverso da minha conversão, pode até ter contas a menos a serem feitas....
ELMO01 28/07/2017 21:03:59
#475503
Pessoal fiz esta função abaixo:

Public Periodo As TimeSpan

Function Cal_Horas2(Data As Date, ByVal Entrada As DateTime, ByVal Saida As DateTime) As DateTime
If Entrada >= #10:00:00 PM# And Entrada <= #5:00:00 AM# Then
[ô]*
[ô]* Noite
[ô]* Horário noturno compreende de 22:00 as 05:00 da manhã do dia seguinte
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Dim DataNew As Date = DateAdd(DateInterval.Day, 1, Data)
Saida = New DateTime(Mid( DataNew, 7), Mid( DataNew, 4, 2), Mid( DataNew, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
Else
[ô]*
[ô]* Dia
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Saida = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada

End If

Return Periodo

End Function

Mais esta função me retorna um erro que não estou conseguindo retirar

Return Periodo -> Erro 1 Valor de tipo [ô]System.TimeSpan[ô] não pode ser convertido para [ô]Date[ô].

Como faço para acertar este erro ai?

JABA 28/07/2017 23:59:59
#475504
Converta o tipo de retorno da sua função para um TimeSpan em vez de DateTime.

Function Cal_Horas2(Data As Date, ByVal Entrada As DateTime, ByVal Saida As DateTime) As [txt-color=#e80000]TimeSpan [/txt-color]


OBS: você pode fazer cálculos com hora sem usar essas funções aí.
NICKOSOFT 29/07/2017 15:27:36
#475514
cara, já foi dito o jeito menos errado de se fazer, mas já q vc quer reinventar a roda, sua questão é apenas a logica, q vc quer, mas não consegue pensar......
  
Function CalcExtNot(ByVal entrada As DateTime, ByVal saida As DateTime) As String
Dim dblDia As Double
Dim dblHora As Double
Dim dblMinutos As Double
Dim dblTemp As Double
dblTemp = DateDiff(DateInterval.Minute, entrada, saida)
dblDia = CLng((dblTemp / 60) / 24)

dblHora = CLng(dblTemp / 60) - (24 * dblDia)
dblMinutos = dblTemp - ((dblHora * 60) + (24 * dblDia) * 60)
If dblMinutos < 0 Then
dblMinutos = dblMinutos * -1
End If
Return [Ô]Dia [Ô] & CStr(dblDia) & [Ô]- Horas [Ô] & CStr(dblHora) & [Ô]:[Ô] & CStr(dblMinutos)
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MessageBox.Show(CalcExtNot(CDate(TextBox1.Text), CDate(TextBox2.Text)))
End Sub

entrada 05/10/2010 08:30:00
saída 06/10/2010 17:59:00
messagebox dia1 horas 9:29
ELMO01 31/07/2017 08:55:43
#475528
Pessoal a função final ficou desta forma

Public Periodo As TimeSpan

Function Cal_Horas2(Data As Date, ByVal Entrada As DateTime, ByVal Saida As DateTime) As TimeSpan
If Entrada >= #10:00:00 PM# Or Saida <= #5:00:00 AM# Then
[ô]*
[ô]* Noite
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Dim DataNew As Date = DateAdd(DateInterval.Day, 1, Data)
Saida = New DateTime(Mid(DataNew, 7), Mid(DataNew, 4, 2), Mid(DataNew, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
Else
[ô]*
[ô]* Dia
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Saida = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada

End If
Return Periodo
End Function

Espero que sirva para outras pessoas que estão com o mesmo problema.

Agradeço a todos que me ajudou a fazer a função.
Página 2 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas