CALCULAR IDADE ANO BISSSEXTO
Bom dia a todos!
o codigo abaixo está funcionado normal mas quando tem ano bissexto ele não calcula corretamente se alguem puder ajudar eu agradeço.
Como eu faço para calcular idade quando e ano bissexto?
Dim anos, meses, dias, dias_sobran As Integer
Dim anos_str, meses_str, dias_str As String
Dim PriFec As Date = Me.txtDatadeNasc.Text
Dim SecFec As Date = CDate(Date.Today)
Dim DiasTotales As Long = DateDiff(DateInterval.Day, PriFec, SecFec)
Try
anos = DiasTotales \ 365
dias_sobran = DiasTotales Mod 365
meses = dias_sobran \ 30
dias = dias_sobran Mod 30
If (anos > 0) Then
anos_str = anos & [Ô] ano(s) [Ô]
Else
anos_str = [Ô][Ô]
End If
If (meses > 0) Then
meses_str = meses & [Ô] mes(es) [Ô]
Else
meses_str = [Ô][Ô]
End If
If (dias > 0) Then
dias_str = dias & [Ô] dia(s)[Ô]
Else
dias_str = [Ô][Ô]
End If
txtIdadeAtualDasVacas.Text = Trim(anos_str & meses_str & dias_str)
Catch ex As Exception
MsgBox([Ô]A DATA DE NASCIMENTO [Ô] & txtDatadeNasc.Text & [Ô] NÃO FOI ENCONTRADO![Ô], MsgBoxStyle.Information, [Ô]estudo[Ô])
End Try
o codigo abaixo está funcionado normal mas quando tem ano bissexto ele não calcula corretamente se alguem puder ajudar eu agradeço.
Como eu faço para calcular idade quando e ano bissexto?
Dim anos, meses, dias, dias_sobran As Integer
Dim anos_str, meses_str, dias_str As String
Dim PriFec As Date = Me.txtDatadeNasc.Text
Dim SecFec As Date = CDate(Date.Today)
Dim DiasTotales As Long = DateDiff(DateInterval.Day, PriFec, SecFec)
Try
anos = DiasTotales \ 365
dias_sobran = DiasTotales Mod 365
meses = dias_sobran \ 30
dias = dias_sobran Mod 30
If (anos > 0) Then
anos_str = anos & [Ô] ano(s) [Ô]
Else
anos_str = [Ô][Ô]
End If
If (meses > 0) Then
meses_str = meses & [Ô] mes(es) [Ô]
Else
meses_str = [Ô][Ô]
End If
If (dias > 0) Then
dias_str = dias & [Ô] dia(s)[Ô]
Else
dias_str = [Ô][Ô]
End If
txtIdadeAtualDasVacas.Text = Trim(anos_str & meses_str & dias_str)
Catch ex As Exception
MsgBox([Ô]A DATA DE NASCIMENTO [Ô] & txtDatadeNasc.Text & [Ô] NÃO FOI ENCONTRADO![Ô], MsgBoxStyle.Information, [Ô]estudo[Ô])
End Try
Use o objeto TimeSpan para calcular perÃodos de tempo. Ele já contempla o calendário padrão, incluindo dias de anos bisextos.
Kerplunk
Poderia posta um exemplo fazendo favor?
Poderia posta um exemplo fazendo favor?
Kerplunk não desculpe mas não entende nada
Você viu o link? Tem um exemplo do código...
Essa rotina que fiz calcula idade+meses e antes de um ano meses+dias
Fiz ela qdo comecei no VB.Net provavelmente possa ser melhorada
Funciona 100%
Se preferir tira o que está em vermelho que uma classe para validar data
[ô]mskAluDataNascimento.Text = Data a calcular
[ô]txtIdade.Text = Resultado
Exempo: 29/02/2008 = 09a-01m
Private Sub CalculaIdade()
Dim txtIdade1, txtIdade2 As Integer
Dim AluDataNascimento1 As Date
ValidaData.CampoData = [Ô]AluDtNascimento[Ô]
ValidaData.VerificaData()
[txt-color=#e80000] If ValidaData.ResultadoData Then[/txt-color]
AluDataNascimento1 = CDate(mskAluDataNascimento.Text)
txtIdade.Text = ((DateAndTime.Year(Now.Date) - DateAndTime.Year(AluDataNascimento1)) - 1) + IIf((DateAndTime.Month(Now.Date)) * 100 + DateAndTime.Day(Now.Date) >= (DateAndTime.Month(AluDataNascimento1)) * 100 + DateAndTime.Day(AluDataNascimento1), 1, 0)
If txtIdade.Text = 0 Then
txtIdade1 = IIf(DateAndTime.Year(Now.Date) > DateAndTime.Year(AluDataNascimento1), 12 - DateAndTime.Month(AluDataNascimento1) + DateAndTime.Month(Now.Date), DateAndTime.Month(Now.Date) - DateAndTime.Month(AluDataNascimento1)) -
IIf(DateAndTime.Day(Now.Date) < DateAndTime.Day(AluDataNascimento1), 1, 0)
txtIdade2 = DateDiff([Ô]d[Ô], DateAdd(DateInterval.Month, txtIdade1, AluDataNascimento1.AddDays((IIf(DateAndTime.Day(Now.Date) < DateAndTime.Day(AluDataNascimento1), 1, 0)) * -1)), Now.Date)
txtIdade.Text = IIf(txtIdade1 < 10, [Ô]0[Ô] + Trim(Str(txtIdade1)), Trim(Str(txtIdade1))) + [Ô]m-[Ô] +
IIf(txtIdade2 < 10, [Ô]0[Ô] + Trim(Str(txtIdade2)), Trim(Str(txtIdade2))) + [Ô]d[Ô]
Else
txtIdade1 = txtIdade.Text
txtIdade2 = DateDiff([Ô]m[Ô], DateAdd(DateInterval.Year, txtIdade1, AluDataNascimento1), Now.Date) - IIf(DateAndTime.Day(Now.Date) < DateAndTime.Day(AluDataNascimento1), 1, 0)
txtIdade.Text = IIf(txtIdade1 < 10, [Ô]0[Ô] + Trim(Str(txtIdade1)), Trim(Str(txtIdade1))) + [Ô]a-[Ô] +
IIf(txtIdade2 < 10, [Ô]0[Ô] + Trim(Str(txtIdade2)), Trim(Str(txtIdade2))) + [Ô]m[Ô]
End If
txtIdade.Text = Replace(Replace(Replace(txtIdade.Text, [Ô]-00d[Ô], [Ô][Ô]), [Ô]00m-[Ô], [Ô][Ô]), [Ô]-00m[Ô], [Ô][Ô])
[txt-color=#e80000]End If[/txt-color]
End Sub
[txt-color=#0000f0]Precisando de um Sistema de Gestão Educacional?[/txt-color]
Desenvolvido em VB.NET + SQL Server + Crystal Reports
Conheça nossa Solução: www.cjsystem.com.br
Fiz ela qdo comecei no VB.Net provavelmente possa ser melhorada
Funciona 100%
Se preferir tira o que está em vermelho que uma classe para validar data
[ô]mskAluDataNascimento.Text = Data a calcular
[ô]txtIdade.Text = Resultado
Exempo: 29/02/2008 = 09a-01m
Private Sub CalculaIdade()
Dim txtIdade1, txtIdade2 As Integer
Dim AluDataNascimento1 As Date
ValidaData.CampoData = [Ô]AluDtNascimento[Ô]
ValidaData.VerificaData()
[txt-color=#e80000] If ValidaData.ResultadoData Then[/txt-color]
AluDataNascimento1 = CDate(mskAluDataNascimento.Text)
txtIdade.Text = ((DateAndTime.Year(Now.Date) - DateAndTime.Year(AluDataNascimento1)) - 1) + IIf((DateAndTime.Month(Now.Date)) * 100 + DateAndTime.Day(Now.Date) >= (DateAndTime.Month(AluDataNascimento1)) * 100 + DateAndTime.Day(AluDataNascimento1), 1, 0)
If txtIdade.Text = 0 Then
txtIdade1 = IIf(DateAndTime.Year(Now.Date) > DateAndTime.Year(AluDataNascimento1), 12 - DateAndTime.Month(AluDataNascimento1) + DateAndTime.Month(Now.Date), DateAndTime.Month(Now.Date) - DateAndTime.Month(AluDataNascimento1)) -
IIf(DateAndTime.Day(Now.Date) < DateAndTime.Day(AluDataNascimento1), 1, 0)
txtIdade2 = DateDiff([Ô]d[Ô], DateAdd(DateInterval.Month, txtIdade1, AluDataNascimento1.AddDays((IIf(DateAndTime.Day(Now.Date) < DateAndTime.Day(AluDataNascimento1), 1, 0)) * -1)), Now.Date)
txtIdade.Text = IIf(txtIdade1 < 10, [Ô]0[Ô] + Trim(Str(txtIdade1)), Trim(Str(txtIdade1))) + [Ô]m-[Ô] +
IIf(txtIdade2 < 10, [Ô]0[Ô] + Trim(Str(txtIdade2)), Trim(Str(txtIdade2))) + [Ô]d[Ô]
Else
txtIdade1 = txtIdade.Text
txtIdade2 = DateDiff([Ô]m[Ô], DateAdd(DateInterval.Year, txtIdade1, AluDataNascimento1), Now.Date) - IIf(DateAndTime.Day(Now.Date) < DateAndTime.Day(AluDataNascimento1), 1, 0)
txtIdade.Text = IIf(txtIdade1 < 10, [Ô]0[Ô] + Trim(Str(txtIdade1)), Trim(Str(txtIdade1))) + [Ô]a-[Ô] +
IIf(txtIdade2 < 10, [Ô]0[Ô] + Trim(Str(txtIdade2)), Trim(Str(txtIdade2))) + [Ô]m[Ô]
End If
txtIdade.Text = Replace(Replace(Replace(txtIdade.Text, [Ô]-00d[Ô], [Ô][Ô]), [Ô]00m-[Ô], [Ô][Ô]), [Ô]-00m[Ô], [Ô][Ô])
[txt-color=#e80000]End If[/txt-color]
End Sub
[txt-color=#0000f0]Precisando de um Sistema de Gestão Educacional?[/txt-color]
Desenvolvido em VB.NET + SQL Server + Crystal Reports
Conheça nossa Solução: www.cjsystem.com.br
um simples datediff não ajuda?
Bom dia a todos!
Queria agradecer a todos que me ajudaram!
cheguei nesta solução!
Public Sub novaidade()
Dim anos_str, mes_str, dia_str As String
Dim datacompleta As DateTime
Try
datacompleta = New DateTime(frmCadastro.txtDatadeNasc.Value.Year, frmCadastro.txtDatadeNasc.Value.Month, frmCadastro.txtDatadeNasc.Value.Day)
Dim tday As TimeSpan = DateTime.Now.Subtract(datacompleta)
Dim anos As Integer, mes As Integer, dia As Integer
mes = 12 * (DateTime.Now.Year - dob.Year) + (DateTime.Now.Month - datacompleta.Month)
If DateTime.Now.Day < datacompleta.Day Then
mes -= 1
dia = DateTime.DaysInMonth(datacompleta.Year, datacompleta.Month) - datacompleta.Day + DateTime.Now.Day
Else
dia = DateTime.Now.Day - datacompleta.Day
End If
anos = Math.Floor(mes / 12)
mes -= anos * 12
If (anos > 0) Then
anos_str = anos & [Ô] anos [Ô]
Else
anos_str = [Ô][Ô]
End If
If (mes > 0) Then
mes_str = mes & [Ô] meses [Ô]
Else
mes_str = [Ô][Ô]
End If
If (dia > 0) Then
dia_str = dia & [Ô] dias[Ô]
Else
dia_str = [Ô][Ô]
End If
frmCadastro.txtIdadeAtualDasVacas.Text = Trim(anos_str & mes_str & dia_str)
Catch ex As Exception
MsgBox([Ô]A DATA DE NASCIMENTO [Ô] & frmcadastro.txtDatadeNasc.Value & [Ô] NÃO FOI ENCONTRADO![Ô], MsgBoxStyle.Information, [Ô]estudo[Ô])
End Try
End Sub
Queria agradecer a todos que me ajudaram!
cheguei nesta solução!
Public Sub novaidade()
Dim anos_str, mes_str, dia_str As String
Dim datacompleta As DateTime
Try
datacompleta = New DateTime(frmCadastro.txtDatadeNasc.Value.Year, frmCadastro.txtDatadeNasc.Value.Month, frmCadastro.txtDatadeNasc.Value.Day)
Dim tday As TimeSpan = DateTime.Now.Subtract(datacompleta)
Dim anos As Integer, mes As Integer, dia As Integer
mes = 12 * (DateTime.Now.Year - dob.Year) + (DateTime.Now.Month - datacompleta.Month)
If DateTime.Now.Day < datacompleta.Day Then
mes -= 1
dia = DateTime.DaysInMonth(datacompleta.Year, datacompleta.Month) - datacompleta.Day + DateTime.Now.Day
Else
dia = DateTime.Now.Day - datacompleta.Day
End If
anos = Math.Floor(mes / 12)
mes -= anos * 12
If (anos > 0) Then
anos_str = anos & [Ô] anos [Ô]
Else
anos_str = [Ô][Ô]
End If
If (mes > 0) Then
mes_str = mes & [Ô] meses [Ô]
Else
mes_str = [Ô][Ô]
End If
If (dia > 0) Then
dia_str = dia & [Ô] dias[Ô]
Else
dia_str = [Ô][Ô]
End If
frmCadastro.txtIdadeAtualDasVacas.Text = Trim(anos_str & mes_str & dia_str)
Catch ex As Exception
MsgBox([Ô]A DATA DE NASCIMENTO [Ô] & frmcadastro.txtDatadeNasc.Value & [Ô] NÃO FOI ENCONTRADO![Ô], MsgBoxStyle.Information, [Ô]estudo[Ô])
End Try
End Sub
Tópico encerrado , respostas não são mais permitidas