Как рассчитать возраст от даты рождения в OpenEdge ABL? - PullRequest
0 голосов
/ 12 сентября 2018

Я новичок в прогрессе, и я хочу рассчитать возраст по дате рождения, и я не знаю, как это сделать. Если кто-нибудь знает об этом, пожалуйста, помогите мне. Заранее спасибо.

Что я пробовал до сих пор:

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 голосов
/ 12 сентября 2018

В вашем коде вы просто считаете годы, это не правильный путь. Будет показана только разница в году. Вам нужно посчитать годы на основе месяца и дня. Итак, вы можете попробовать следующий код, который будет работать и для високосного года.

    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.
0 голосов
/ 14 сентября 2018

Используйте функцию интервал .

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

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

Возвращает 29 (до сегодняшнего дня до 16 числа этого года) - отлично справляется и с високосными годами.

0 голосов
/ 12 сентября 2018

То, что вы можете сделать в 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.

Кроме того, если вы хотите, чтобы он был точным, включая високосные годы, вам придется работать немного усерднее.То, что я сделал здесь, это добавление количества лет к дате рождения, чтобы увидеть, уже произошел ли день рождения.Если этого не произошло, я забираю 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...