gpt4 book ai didi

algorithm - 如何计算一个人的年、月、日年龄?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:22 24 4
gpt4 key购买 nike

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

例如:

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

任何指向执行此操作的算法的指针都将不胜感激。

最佳答案

首先,请注意以下假设:例如,如果您出生于 2 月 1 日,那么您正好是 1 个月大,即使您的天数只有 28 天 -- 小于平均一个月。年份也有可变长度(由于闰年),这意味着您生日时的年龄通常不是精确的整数年数。如果您想以年/月/天的形式表达您活着的确切时间,请参阅我的其他答案。但更有可能的是你想恰到好处地捏造它,所以在 2 月 1 日出生意味着每年 2 月 1 日你是 X 岁 0 个月零天,而在任何一个月的 1 日你是 X 岁,Y 个月,和 0 天。

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

给定出生日期 (y,m,d)、当前日期 (ynow,mnow,dnow) 和一个函数 tm () 给出 unix/epoch time for a given date ,以下将输出一个 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];

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

关于algorithm - 如何计算一个人的年、月、日年龄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/453208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com