USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Expert VB - calculo ano bissexto
Luis CR
FORTALEZA
CE - BRASIL
ENUNCIADA !
Postada em 03/11/2010 12:58 hs         
Pessoal, estou começando agora e queria a ajuda de alguém que resolvesse o problema do código abaixo:
'data inicial é 08/02/1988 e a data final é 29/12/2000
'o resultado contando dia a dia tem que dar exatamente: 12 anos, 10 meses e 29 dias é claro que contando também com o dia 29 Dez 00
'anos é total de dias divido por 365
'meses é o resto de dias dividido por 30
'dias é o resto (Obs: datadiff direto não dá certo)
 
 
 
'Função para calcular a idade certa de uma pessoa
Public Function CalculaTempo(Var1 As Date, MostraAnos As Boolean) As String
Dim Var2 As Date
Var3 As Double
Tempoemanos As Integer
bissextos As Integer
Dim O1ebissexto As Boolean
Contamtodos As Boolean
Anoquero As Integer
Tempoemdias As Double
Var2 = Date
'**** vamos ver se a diferença entre as duas datas é inferior ou igual a 1 ano
Var3 = Var2 - Var1
'**** se a diferença é menor que 365
If (Var3 < 365) Then
Tempoemanos = 0
'**** se fo igual a 365 ou 366
If ((Var3 = 365) Or (Var3 = 366)) Then
Tempoemanos = 1
'**** se a data for maior, há que fazer contas
If (Var3 > 366) Then
'**** vamos ver se o 1º ano é bissexto
If ((Year(Var1) Mod 4) = 0) Then
O1ebissexto = True
Else: O1ebissexto = False
End If
'**** vamos ver quantos anos bissextos houve entre as duas datas
bissextos = 0
Anoquero = Year(Var2)
Do While 1 = 1
If (Anoquero < Year(Var1)) Then
Exit Do
If ((Anoquero Mod 4) = 0) Then
bissextos = (bissextos + 1)
Anoquero = Anoquero - 1
Loop
'Verificar se o mês do primeiro ano (data inicial) e Jan ou Fev no caso de ser um ano bissexto
If (O1ebissexto = True) Then
If (Month(Var1) < 3) Then
Contamtodos = True
Else
Contamtodos = False
End If
Else
Contamtodos = True
End If
'**** agora vamos fazer contas
Tempoemdias = Var2 - Var1
'**** vamos acrescentar um dia para cada ano bissexto (se a data inicial for partir do mês 2)
If (Contamtodos = True) Then
Tempoemdias = Tempoemdias + bissextos
Else
Tempoemdias = Tempoemdias + bissextos + 1
End If
'**** finalmente o tempo em anos
CalculaTempo$ = Format((Tempoemdias365))
If (MostraAnos = True) Then
CalculaTempo$ = (CalculaTempo$ & " anos")
End If
End Function
   
Juan Carlos R.A
Pontos: 2843
MACEIO
AL - BRASIL
ENUNCIADA !
Postada em 03/11/2010 14:18 hs            
Olha aqui tem uma dica boa do tio marcoratti:
http://www.macoratti.net/vb_datas.htm
   
Luis CR
FORTALEZA
CE - BRASIL
ENUNCIADA !
Postada em 03/11/2010 14:21 hs         
Obrigado Juan pela dica, mas eu já olhei por lá.
   
Treze
Pontos: 2843 Pontos: 2843
SÃO VICENTE
SP - BRASIL
ENUNCIADA !
Postada em 03/11/2010 16:09 hs            
bom não entendi, pelo meu código dariam 12 anos, 10 meses e 328 dias, e não 329 dias como vc indica, é isso que ta errado? veja meu código:
 
Private Sub Command1_Click()
CalculaIdade "08/02/1988", "29/12/2000"
End Sub

Sub CalculaIdade(dataINI As Date, dataFIm As Date)
Dim dias As Integer, meses As Integer, anos As Integer
dias = DateDiff("d", dataINI, dataFIm) Mod 365
meses = DateDiff("m", dataINI, dataFIm) Mod 12
anos = DateDiff("yyyy", dataINI, dataFIm)
MsgBox anos & " anos, " & meses & " meses e " & dias & " dias."
End Sub
TÓPICO EDITADO
 
Luis CR
FORTALEZA
CE - BRASIL
ENUNCIADA !
Postada em 03/11/2010 17:06 hs         
Caro amigo Treze, mudei o seu codigo acima da seguinte forma:
 
Sub CalculaIdade(dataINI As Date, dataFIm As Date)
Dim dias As Integer, meses As Integer, anos As Integer
dias = DateDiff("d", dataINI, dataFIm) Mod 365  12 + 1
meses = DateDiff("m", dataINI, dataFIm) Mod 12
anos = DateDiff("yyyy", dataINI, dataFIm)
MsgBox anos & " anos, " & meses & " meses e " & dias & " dias."
End Sub
Private Sub CommandButton1_Click()
CalculaIdade "08/02/1988", "29/12/2000"
End Sub
resultado foi exatamente o que eu estava procurando, só que quando eu troquei a primeira data por 01/07/2000 o resultado foi 5 meses e 2 dias quando na verdade deveria ser 6 meses e 2 dias. Pq o total de dias é 182. Por favor, se vc conseguir resolver o problema eu lhe agradeço.
   
Treze
Pontos: 2843 Pontos: 2843
SÃO VICENTE
SP - BRASIL
ENUNCIADA !
Postada em 03/11/2010 17:10 hs            
bom vamos lá to tentando enteder o qe pretende
 
porque colocar um dia a mais?
 
   
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página