怎么计算一个人的年龄,能精确到月/天的

如何计算一个人的年龄,能精确到月/天的。
最好能简单些。

------解决方案--------------------
Delphi(Pascal) code

procedure TForm1.Button1Click(Sender: TObject);
  function CalTwoDateDiff(vBeginDate,vEndDate: TDateTime): String;
  var
    iYear,iMonth,iDays,iHours,iMinutes: Integer;
    str: String;
  begin
    iYear :=YearsBetween(vEndDate,strtodate(formatdatetime('yyyy-mm-dd',vBeginDate)));
    iMonth := MonthsBetween(IncYear(vEndDate,-iYear),strtodate(formatdatetime('yyyy-mm-dd',vBeginDate)));
    iDays := DaysBetween(IncMonth(vEndDate,-MonthsBetween(vEndDate,strtodate(formatdatetime('yyyy-mm-dd',vBeginDate)))),
             strtodate(formatdatetime('yyyy-mm-dd',vBeginDate)));
    iHours := HoursBetween(IncDay(vEndDate,-DaysBetween(vEndDate,strtodate(formatdatetime('yyyy-mm-dd',vBeginDate)))),
             strtodateTime(formatdatetime('yyyy-mm-dd hh:mm:ss',vBeginDate)));
    iMinutes := MinutesBetween(IncHour(vEndDate,-HoursBetween(vEndDate,strtodateTime(formatdatetime('yyyy-mm-dd hh:mm:ss',vBeginDate)))),
             strtodateTime(formatdatetime('yyyy-mm-dd hh:mm:ss',vBeginDate)));
    str := '';
    if iYear>0 then str := str + IntToStr(iYear)+'年';
    if iMonth>0 then str := str + IntToStr(iMonth)+'月';
    if iDays>0 then str := str + IntToStr(iDays)+'天';
    if iHours>0 then str := str + IntToStr(iHours)+'小时';
    if iMinutes>0 then str := str + IntToStr(iMinutes)+'分钟';
    Result := str;
  end;
begin
  DateSeparator := '-';
  showmessage('你已经活了 '+CalTwoDateDiff(datetimepicker1.datetime,now())+ ',够长的了');
end;