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

时间:2018-09-12 07:30:50

标签: 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岁,但实际年龄为29岁。

3 个答案:

答案 0 :(得分:5)

使用interval函数。

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

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

返回29(只要今天在今年16日之前)-也可以处理leap年。

答案 1 :(得分:3)

您可以在ABL中执行的操作是减去日期。给出了以天为单位的年龄。然后,您可以将其除以365并四舍五入以得出年龄。显然,这没有考虑leap年,因此也不是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.

或者,如果您想要包括leap年在内的准确信息,则必须加倍努力。 我在这里所做的是将出生日期加上年数,以查看生日是否已经发生。如果还没有,那我需要1年的时间。可能有更优雅的解决方案,但可以完成工作!

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.

答案 2 :(得分:3)

在您的代码中,您只计算年份,这不是正确的方法。仅显示一年的差异。您还需要根据月份和天数来计算年份。因此,您可以尝试以下适用于the年的代码。

    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.