MOSTRAR A IDADE EM ANOS, MESES, SEMANAS, DIAS, ETC

RICARDOCENTENO 18/01/2017 16:45:25
#470820
Olá pessoal.

A tempos atrás peguei um exemplo daqui de um projeto em .NET que através de uma data o sistema calcula a idade em anos, meses, semanas, dias, horas, minutos e segundos. Achei bem interessante o exemplo mas não achei mais. Alguém poderia postar o código de como faz isso?

Eu consegui chegar apenas nos anos e meses.

  
Dim idadeMeses, idadeAnos,diferenca As Double
Dim datanascimento As Date = [Ô]10/06/2011[Ô]
diferenca = DateDiff(DateInterval.Day, datanascimento, Date.Now)
idadeAnos = diferenca / 365.25
idadeMeses = ((idadeAnos - Int(idadeAnos)) * 12)
MsgBox([Ô]Você tem [Ô] & Int(idadeAnos) & [Ô] anos e [Ô] & Int(idadeMeses) & [Ô] meses de vida.[Ô])


Aguardo retorno e desde já agradeço.
TEKO 18/01/2017 18:13:53
#470823
Function CalculaTempo(ByVal Entrada As Date)
Dim Anos, Meses, Dias, iAnos, iMeses, iDias As Double
Dim diasDiff As String
Anos = DateDiff(DateInterval.Year, Entrada, Date.Today)
Entrada = DateAdd(DateInterval.Year, Anos, Entrada)
If Entrada < Date.Today Then
iMeses = DateDiff(DateInterval.Month, Date.Today, Entrada)
diasDiff = DatePart(DateInterval.Day, Date.Today) - DatePart(DateInterval.Day, Entrada)
ElseIf Entrada = Date.Today Then
iMeses = DateDiff(DateInterval.Month, Entrada, Date.Today)
diasDiff = DatePart(DateInterval.Day, Date.Today) - DatePart(DateInterval.Day, Entrada)
ElseIf Entrada > Date.Today Then
Anos = Anos - 1
iMeses = 12 - DateDiff(DateInterval.Month, Date.Today, Entrada)
diasDiff = DatePart(DateInterval.Day, Date.Today) - DatePart(DateInterval.Day, Entrada)
End If
Dim diamesDtAdmin As Double = Date.DaysInMonth(DatePart(DateInterval.Year, Date.Today), DatePart(DateInterval.Month, Date.Today))
If diasDiff = diamesDtAdmin Then
diasDiff = 0
iMeses = iMeses + 1
End If
If iMeses = 12 Then
Anos = Anos + 1
End If
Dim AnosTexto, MesesTexto, DiasTexto As String
If CInt(Anos) = 1 Then
AnosTexto = [Ô] Ano, [Ô]
Else
AnosTexto = [Ô] Anos, [Ô]
End If
If iMeses = 1 Then
MesesTexto = [Ô] mês e [Ô]
Else
MesesTexto = [Ô] meses e [Ô]
End If
If diasDiff = 1 Then
DiasTexto = [Ô] dia.[Ô]
Else
DiasTexto = [Ô] dias.[Ô]
End If
If String.IsNullOrEmpty(txtTempoAdicionalA.Text) Then
txtTempoAdicionalA.Text = 0
End If
lbltempo.Text = CInt(Anos) + txtTempoAdicionalA.Text & AnosTexto & Math.Abs(iMeses) & MesesTexto & Math.Abs(CInt(diasDiff)) & DiasTexto
End Function
RICARDOCENTENO 18/01/2017 18:36:03
#470825
Olá Teko, obrigado pela resposta.

Eu já tinha visto esta solução, porém, dá os meses errados. Vou adaptar para ver como fica.
KERPLUNK 18/01/2017 23:44:04
#470827
Bem, o objeto TimeSpan, não é lá muito completo nisso. E aqui no Brasil se usa muito esse tipo de calculo de tempo. Com isso em mente, você pode usar um recurso do .NET Framework, aliado à um calculo. Você precisa de uma classe para os valores de tempo e uma extensão para DateTime. Vou deixar um exemplo aqui, quem quiser aproveitar, sinta-se à vontade!

Faça seu login para responder