如何在表演屏幕中准确计算人的年龄

How to accurately calculate person's age in a perform screen

带有 isql 4.10 DD6 的 Informix-SE 4.10:

我有一个 DATE 列,BirthDate,链接到一个执行字段标签 "dob"。当用户输入 dob 时,我正在执行以下日期算法:

age = (TODAY - dob ) / 365.25

字段标记年龄是 DISPLAYONLY TYPE DECIMAL 字段,FORMAT="##.##"。

此方法生成的结果不准确。

业务规则:例如,如果一个人在18岁生日的前一天真实年龄不是18岁,我需要在年龄字段标记中显示17,并中止客户行的插入。人必须年满 18 岁。

此 ifx 版本支持 DATETIME 和 INTERVAL 数据类型,但用户只习惯以 MMDDYYYY 格式输入日期。

为了判断生日是不是今年,在dobFebruary 29[=23=的情况下一定要确保不要生成无效日期] 而 TODAY 是非闰年。由于2000年是闰年,所以可以避免总是对2000年做减法的问题。

MDY(MONTH(dob), DAY(dob), 2000) > MDY(MONTH(TODAY), DAY(TODAY), 2000)

最后,如果是这样的话,从年份差中减一:

age = (YEAR(TODAY) - YEAR(dob) - CASE WHEN MDY(MONTH(dob), DAY(dob), 2000) > MDY(MONTH(TODAY), DAY(TODAY), 2000) THEN 1 ELSE 0 END)::int