Ir para conteúdo
Fórum Script Brasil
  • 0

Calculando Horas & Minutos...


Danleonhart

Pergunta

Pessoal vejam esse video e me expliquem como posso corrigir este erro...

Video.

Trata-se de horas & Minutos...assim está o script do Botão

Private Sub cmd_calc_Click()
t3.Text = Format(TimeValue(mk2.Text) - TimeValue(mk1.Text), "hh:mm")
End Sub

Há 2 MaskEdBox e 1 TextBox

Lí diversos assuntos sobre TimeSerial & TimeValue mas sem um exemplo prático ficar dificil entender afundos...

Grato a todos !

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olá!

No seu código tem apenas o horário, porem também é necessário a data para saber se é o mesmo dia ou não.

'SEGUNDO PARA TEMPO. Ex: 25 segs = 00:25 // 247 segs = 04:07 // Funciona até com dias!

Public Function Seg2Tempo(ByVal Segundos As Long) As String
        Dim X As Integer, Conta As Long
        Dim xDias As Long, xHoras As Long, xMinutos As Long, xSegundos As Long
        
        Conta = Segundos
        xDias = Conta \ 86400: Conta = Conta - (xDias * 86400)
        xHoras = Conta \ 3600: Conta = Conta - (xHoras * 3600)
        xMinutos = Conta \ 60: Conta = Conta - (xMinutos * 60)
        xSegundos = Conta
        
        Seg2Tempo$ = IIf(Segundos >= 86400, xDias & IIf(xDias > 1, " dias + ", " dia + "), vbNullString) & IIf(Segundos >= 3600, Format(xHoras, "0#") & ":", vbNullString) & Format(xMinutos, "0#") & ":" & Format(xSegundos, "0#")
End Function

Private Sub Form_Load()
    Text1 = Now()
    Text2 = DateAdd("n", 5, Now())
End Sub

Private Sub Command1_Click()
    Text3 = Seg2Tempo(DateDiff("s", Text1, Text2))
End Sub

Veja se este exemplo te serve de algo!

t+!!!

Link para o comentário
Compartilhar em outros sites

  • 0

o q você queria q acontecesse quando o primeiro fosse menor?? q ficasse negativo??

se for isso, o resultado traz o sinal certinho, mas ele é perdido na hora do format().

se você guardar numa variavel, você pode acrescentar no textbox:

Private Sub cmd_calc_Click()
    Dim t As Integer

    t = TimeValue(mk2.Text) - TimeValue(mk1.Text)

    If t < 0 Then
        t3.Text = "-"
    Else
        t3.Text = ""
    End If

    t3.Text = t3.Text & Format(t, "HH:MM")
End Sub[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

@Kuroi...

A intenção é de que quando chegar em 23:00 ele zere...mas dê a diferença...tipo: 23:40 as 00:10 = 00:30...

a opção do Anderson Fernandes funciona, porém preciso setar "data"... e para neu Form só vai ficar à mostra as caixas de Mask e o TextBox com o resultado...

Serve tambem se ficar desta forma: 23:10 as 01:10 = "120"

pois será um tipo de relatorio em que a diferença será anotada em minutos...mas do jeito que for apresentada serve!

Obrigado !

Link para o comentário
Compartilhar em outros sites

  • 0
@Kuroi...

A intenção é de que quando chegar em 23:00 ele zere...mas dê a diferença...tipo: 23:40 as 00:10 = 00:30...

a opção do Anderson Fernandes funciona, porém preciso setar "data"... e para neu Form só vai ficar à mostra as caixas de Mask e o TextBox com o resultado...

Serve tambem se ficar desta forma: 23:10 as 01:10 = "120"

pois será um tipo de relatorio em que a diferença será anotada em minutos...mas do jeito que for apresentada serve!

Obrigado !

Certo... então tente isto:

Nos textbox deixe somente as horas e os minutos ("hh:nn")

No exemplo a seguir o resultado nunca será negativo

mesmo q o segundo valor seja menor q o primeiro.

exemplo:

02:30 e 02:29 = 23:59:00

02:30 e 01:30 = 23:00:00

02:30 e 03:31:01 = 01:01:01

Segue o codigo:

Aqui esta somente do Command1_Click(),

a função Seg2Tempo continua a mesma

Private Sub Command1_Click()
Dim dt As Date, dt1, dt2

Text1 = Trim(Text1)
Text2 = Trim(Text2)

dt = Now()

If (Val(Mid(Text2, 1, 2)) < Val(Mid(Text1, 1, 2))) Or (Val(Mid(Text2, 1, 2)) = Val(Mid(Text1, 1, 2)) And Val(Mid(Text2, 4, 2)) < Val(Mid(Text1, 4, 2))) Then
    dt2 = CDate(Format(DateAdd("d", 1, dt), "dd/MM/yyyy") & " " & Text2)
Else
    dt2 = CDate(Format(dt, "dd/MM/yyyy") & " " & Text2)
End If
    
    dt1 = CDate(Format(dt, "dd/MM/yyyy") & " " & Text1)
    
    Text3 = Seg2Tempo(DateDiff("s", dt1, dt2))
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

@ Anderson...

Cara, não se irrita tá...mas tem como você me explicar passo a passo estes scripts ?! tanto o Modulo quanto o Botão ?!

Gosto de aprender bem detalhado, pois faz pouco menos de 2 meses que comecei a fuçar em programação (apesar de muitos falarem que VB-6 não é programação :P ) pela informação que me passar, vou tentar converter os valores finais em "minutos"...

Obrigado por tudo !

Acompanhando...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...