如何计算一个人的年龄(年,月,日)?

我想根据给定的出生日期和当前日期(相对于当前日期的年,月和日)来计算一个人的年龄。

例如:

>>> calculate_age(2008, 01, 01)

1 years, 0 months, 16 days

任何能够做到这一点的算法的指针都将受到赞赏。

回答:

首先,请注意以下假设:例如,如果您出生于2月1日,然后在次年的3月1日,即使您的年龄只有28岁,也正好是1个月大-

小于平均月份的长度。年份也有可变长度(由于leap年),这意味着您生日的年龄通常不是确切的整数年。如果您想表达您还活着的确切时间(以年/月/日为单位),请参阅我的其他答案。但是您更可能想正确地捏造它,以便于2月1日出生意味着您在2月1日出生X岁零个月零0天,而在每个月的第一天您X岁零Y个月,和0天。

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

给定出生(y,m,d)日期,当前日期(ynow,mnow,dnow)和给定日期的unix /epoch时间的函数tm(),以下代码将输出一个三元素列表,年龄为{年,月,日}:

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];

如果您不喜欢所有楼层和模组,则可以使用以下等效算法。但是我认为以上更好。一方面,它避免了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];

以上是 如何计算一个人的年龄(年,月,日)? 的全部内容, 来源链接: utcz.com/qa/434979.html

回到顶部