在OpenEdge ABL中如何从出生日期开始计算年龄?

在OpenEdge ABL中如何从出生日期开始计算年龄?,openedge,Openedge,我是新手,我想从出生日期开始计算年龄,但我不知道怎么做。如果有人知道这件事,请帮助我。 提前谢谢 到目前为止,我尝试的是: define var dob as date. define var age as character. assign dob = 09/16/1988. age = STRING(INT(YEAR(TODAY) - YEAR(dob ))). message age view-as alert-box. 它显示的是30岁,但实际上是2

我是新手,我想从出生日期开始计算年龄,但我不知道怎么做。如果有人知道这件事,请帮助我。 提前谢谢

到目前为止,我尝试的是:

define var dob as date.
define var age as character.
assign
      dob = 09/16/1988.
      age = STRING(INT(YEAR(TODAY) - YEAR(dob ))).
      message age view-as alert-box.

它显示的是30岁,但实际上是29岁。

在ABL中,你可以做的事情是减去日期。它给出了以天为单位的年龄。然后你可以将其除以365,再将其四舍五入,得到以年为单位的年龄。显然,这没有考虑闰年,所以不是100%准确

DEFINE VARIABLE dob AS date.
DEFINE VARIABLE age AS INTEGER.
ASSIGN
      dob = 09/16/1988
      age = TRUNCATE(((TODAY - 03/25/1979) / 365),0).
      MESSAGE age VIEW-AS ALERT-BOX.
或者,如果你希望它是准确的,包括闰年,你必须更加努力地工作。 我在这里做的是把出生日期加上年数,看看生日是否已经发生了。如果还没有,我就要离开一年。可能有更优雅的解决方案,但它会成功的

DEFINE VARIABLE dob AS date.
DEFINE VARIABLE age AS INTEGER.
DEFINE VARIABLE comp AS DATE NO-UNDO.
ASSIGN
      dob = 09/16/1988.
comp = add-interval(dob,year(TODAY) - year(dob),"YEARS").
IF TODAY GT comp THEN 
    age = year(TODAY) - year(dob).
ELSE 
    age = year(TODAY) - year(dob) - 1.           
MESSAGE age VIEW-AS ALERT-BOX.

在您的代码中,您只是在计算年份,这不是正确的方法。它将显示今年的不同。您还需要根据月份和天数计算年份。因此,您可以尝试以下代码,这些代码也适用于闰年

    define var dob as date.
    define var vYears as int.
    define var age as int.

    assign 
         dob = 09/16/1988.
    vYears = int(year(today) - year(dob)).

    if (month(today) < month(dob)) then do:
    age = vYears - 1.
    end.
    if (month(today) = month(dob)) then do:
      if (day(today) < day(dob)) then do:
           age = vYears - 1.
      end.
      else do:
           age = vYears.
     end.
    end.
    if (month(today) > month(dob)) then do:
         age = vYears.
    end.

message age view-as alert-box.
将var dob定义为日期。
将var vYears定义为int。
将var年龄定义为int。
分配
dob=1988年9月16日。
vYears=int(年(今天)-年(dob))。
如果(月(今天)<月(dob)),则执行以下操作:
年龄=岁-1。
结束。
如果(月(今天)=月(dob)),则执行以下操作:
如果(日(今天)<日(dob)),则应:
年龄=岁-1。
结束。
否则,请:
年龄=岁。
结束。
结束。
如果(月(今天)>月(dob)),则执行以下操作:
年龄=岁。
结束。
消息期限视图为警报框。
使用该功能

define var dob as date initial 09/16/1988.

message interval( today, dob, "years" ) view-as alert-box.

返回29(只要今天在今年16日之前)-闰年处理也很好。

Hi@Ajay Jangra,欢迎来到SO!你能展示一下到目前为止你都做了些什么吗?这将使问题更加具体,使人们更容易帮助你!我编辑我的问题并定义问题,请帮助,你计算的年龄只考虑一年,你也应该考虑一天和一个月。我不知道它,如何做到这是一个非常好的解决方案。