当前位置:  开发笔记 > 人工智能 > 正文

如何计算年,月,日的人的年龄?

如何解决《如何计算年,月,日的人的年龄?》经验,为你挑选了1个好方法。

我想计算出生日期的人的年龄和相对于当前日期的年,月和日的当前日期.

例如:

>>> calculate_age(2008, 01, 01)
1 years, 0 months, 16 days

任何指向算法的指针都将受到赞赏.



1> dreeves..:

首先,请注意这样的假设:例如,如果您出生在2月1日然后在3月1日,那么您正好是1个月大,即使您的年龄仅为28天 - 低于平均月份的长度.年份也有可变长度(由于闰年),这意味着您的生日年龄通常不是完整的整数年.如果你想用几年/几个月/几天来表达你活着的确切时间,请参阅我的另一个答案.但更有可能你想恰到好处地捏造它,以便在2月1日出生意味着每年2月1日你是X年,0个月和0天,并且在任何一个月的第一天你是X年,Y个月,和0天.

在这种情况下,请继续阅读.(注意:以下内容仅适用于过去的日期.)

给定出生(y,m,d)日期,当前日期,(ynow,mnow,dnow)以及给定给定日期的unix /纪元时间的函数tm(),以下将输出一个3元素列表,其中年龄为{years,months,days}:

t0 = y*12 + m - 1;        # total months for birthdate.
t = ynow*12 + mnow - 1;   # total months for Now.
dm = t - t0;              # delta months.    
if(dnow >= d) return [floor(dm/12), mod(dm,12), dnow-d];
dm--; t--;
return [floor(dm/12), mod(dm,12), 
        (tm({ynow,mnow,dnow}) - tm({floor(t/12), mod(t,12)+1, d}))/60/60/24];

如果你不喜欢所有的楼层和mod,以下是一个等效的算法.但我认为上述情况更好.一方面它避免了tm()在不需要的时候打电话.

{yl, ml} = {ynow, mnow};
if(mnow < m || mnow == m && dnow < d) yl--;
if(dnow < d) ml--;
years = yl - y;
months = ml + 12*(ynow - yl) - m;
yl = ynow;
if(ml == 0) { ml = 12; yl--; }
days = (tm({ynow, mnow, dnow}) - tm({yl, ml, d}))/60/60/24;
return [years, months, days];

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有