知道出生日期,如何得到今天是多少岁多少个月多少天?

赤脚_码农 2017-04-10 08:28:24
如题 比如知到 某个人是2017年3月9日生的,如何能计算出 他今天是0岁1月1天呢? 谢谢指导

我现在只会用下面代码得到天数,问题是每个月的天数都不一样,再如果有个润月或啥的就没有办法计算出准确的数据了。而时间的时 分 秒因为有准确的60进位所以比较好弄。
Dim 如意生日 As Date = "2017/1/29"
Tex如意年龄.Text = DateDiff(DateInterval.Day, 如意生日, Now)


...全文
750 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赤脚_码农 2017-04-10
  • 打赏
  • 举报
回复
不好意思,我自己搞错了,修改的是开始日期。
赤脚_码农 2017-04-10
  • 打赏
  • 举报
回复
引用 8 楼 Tiger_Zhao 的回复:
Public Class Form1
    '放一个Button控件'

    Private Sub CalculateAge(ByVal birthday As Date)
        Dim dtToday As Date = Date.Today

        Dim year As Integer = DateDiff(DateInterval.Year, birthday, dtToday)
        Dim dt As Date = DateAdd(DateInterval.Year, year, birthday)
        If dt > dtToday Then
            year -= 1
            dt = DateAdd(DateInterval.Year, -1, dt)
        End If

        Dim month As Integer = DateDiff(DateInterval.Month, dt, dtToday)
        dt = DateAdd(DateInterval.Month, month, dt)
        If dt > dtToday Then
            month -= 1
            dt = DateAdd(DateInterval.Month, -1, dt)
        End If

        Dim day As Integer = DateDiff(DateInterval.Day, dt, dtToday)

        Debug.Print(String.Format("今天:{0:yyyy-MM-dd}", dtToday))
        Debug.Print(String.Format("生日:{0:yyyy-MM-dd}", birthday))
        Debug.Print(String.Format("最近整月日期:{0:yyyy-MM-dd}", dt))
        Debug.Print(String.Format("年龄:{0}年{1}月{2}天", year, month, day))
        Debug.Print("")
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        CalculateAge("2014-12-01")
        CalculateAge("2014-12-31")
    End Sub

End Class

今天:2017-04-10
生日:2014-12-01
最近整月日期:2017-04-01
年龄:2年4月9天

今天:2017-04-10
生日:2014-12-31
最近整月日期:2017-03-30
年龄:2年3月11天

Public Class Form1
    '放一个Button控件'

    Private Sub 计算年龄(ByVal 出生日期 As Date)
        Dim 当前日期 As Date = Date.Today

        Dim 年 As Integer = DateDiff(DateInterval.Year, 出生日期, 当前日期) '求出年差
        Dim 最近整月日期 As Date = DateAdd(DateInterval.Year, 年, 出生日期)
        If 最近整月日期 > 当前日期 Then
            年 -= 1
            最近整月日期 = DateAdd(DateInterval.Year, -1, 最近整月日期)
        End If

        Dim 月 As Integer = DateDiff(DateInterval.Month, 最近整月日期, 当前日期)
        最近整月日期 = DateAdd(DateInterval.Month, 月, 最近整月日期)
        If 最近整月日期 > 当前日期 Then
            月 -= 1
            最近整月日期 = DateAdd(DateInterval.Month, -1, 最近整月日期)
        End If

        Dim 日 As Integer = DateDiff(DateInterval.Day, 最近整月日期, 当前日期)

        Label7.Text = "当前日期:" & 当前日期
        Label8.Text = "出生日期:" & 出生日期
        Label9.Text = "最近整月日期:" & 最近整月日期
        Label10.Text = "年龄:" & 年 & "年" & 月 & "月" & 日 & "日"

    End Sub


    Private Sub Dat吉祥生日_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Dat吉祥生日.ValueChanged
        计算年龄(Dat吉祥生日.Value.Date)
    End Sub
End Class
不对呀,我再研究一下你的思路 比如今天是 10号 计算是 1岁10月11天 我选11号 他会变成1岁10月10天
Tiger_Zhao 2017-04-10
  • 打赏
  • 举报
回复
Public Class Form1
'放一个Button控件'

Private Sub CalculateAge(ByVal birthday As Date)
Dim dtToday As Date = Date.Today

Dim year As Integer = DateDiff(DateInterval.Year, birthday, dtToday)
Dim dt As Date = DateAdd(DateInterval.Year, year, birthday)
If dt > dtToday Then
year -= 1
dt = DateAdd(DateInterval.Year, -1, dt)
End If

Dim month As Integer = DateDiff(DateInterval.Month, dt, dtToday)
dt = DateAdd(DateInterval.Month, month, dt)
If dt > dtToday Then
month -= 1
dt = DateAdd(DateInterval.Month, -1, dt)
End If

Dim day As Integer = DateDiff(DateInterval.Day, dt, dtToday)

Debug.Print(String.Format("今天:{0:yyyy-MM-dd}", dtToday))
Debug.Print(String.Format("生日:{0:yyyy-MM-dd}", birthday))
Debug.Print(String.Format("最近整月日期:{0:yyyy-MM-dd}", dt))
Debug.Print(String.Format("年龄:{0}年{1}月{2}天", year, month, day))
Debug.Print("")
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
CalculateAge("2014-12-01")
CalculateAge("2014-12-31")
End Sub

End Class


今天:2017-04-10
生日:2014-12-01
最近整月日期:2017-04-01
年龄:2年4月9天

今天:2017-04-10
生日:2014-12-31
最近整月日期:2017-03-30
年龄:2年3月11天
赤脚_码农 2017-04-10
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
[quote=引用 3 楼 u012052110 的回复:]
现在就在常式用TimeSpan 但这玩意没有年和月,需要二次处理,才行。正在研究

年差就是两个datetime的year相减,月差可以这么算
int month = dt1.Year * 12 + dt1.Month - dt2.Year * 12 - dt2.Month;
[/quote]


不对呀,月份
xdashewan 2017-04-10
  • 打赏
  • 举报
回复
引用 4 楼 u012052110 的回复:
月稍微有点麻烦 2017年的4月 和 2010年的9月 相差几十个月,这不是我要的结果,我想要除去整年后余下的月数。正在考虑 正在考虑
判一下月是否跨年
xdashewan 2017-04-10
  • 打赏
  • 举报
回复
引用 3 楼 u012052110 的回复:
现在就在常式用TimeSpan 但这玩意没有年和月,需要二次处理,才行。正在研究
年差就是两个datetime的year相减,月差可以这么算
int month = dt1.Year * 12 + dt1.Month - dt2.Year * 12 - dt2.Month;
赤脚_码农 2017-04-10
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
年月日分开计算,再合并
年比较简单, 2017年 -2010年 就可以得到 年 月稍微有点麻烦 2017年的4月 和 2010年的9月 相差几十个月,这不是我要的结果,我想要除去整年后余下的月数。正在考虑 日简单 也一样麻烦,得到的是一个很大的数字,我想要得到的是 除过年和月之后剩余的日差数 正在考虑
赤脚_码农 2017-04-10
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
两个日期相减得到TimeSpan,参考https://msdn.microsoft.com/zh-cn/library/system.timespan.aspx
现在就在常式用TimeSpan 但这玩意没有年和月,需要二次处理,才行。正在研究
xdashewan 2017-04-10
  • 打赏
  • 举报
回复
两个日期相减得到TimeSpan,参考https://msdn.microsoft.com/zh-cn/library/system.timespan.aspx
shoppo0505 2017-04-10
  • 打赏
  • 举报
回复
年月日分开计算,再合并

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧