Delphi
Варіант 1:
program DateBetween;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,
  System.DateUtils;
var
  AUnixTime: Int64;
  ADate: TDateTime;
begin
  try
    Read(AUnixTime); // читаємо цифри
    ADate := UnixToDateTime(AUnixTime); // конвертуємо
    WriteLn(DateTimeToStr(ADate)); // напишемо що це за дата
    if YearsBetween(Date, ADate) > 0 then // якщо різниця більша за 0 років
      WriteLn(IntToStr(YearsBetween(Date, ADate)) + 'р. назад') // то виводимо в роках
    else if MonthsBetween(Date, ADate) > 0 then
      WriteLn(IntToStr(MonthsBetween(Date, ADate)) + 'м. назад')
    else if DaysBetween(Date, ADate) > 0 then
      WriteLn(IntToStr(DaysBetween(Date, ADate)) + 'д. назад')
    else if HoursBetween(Date, ADate) > 0 then
      WriteLn(IntToStr(HoursBetween(Date, ADate)) + 'г. назад')
    else if MinutesBetween(Date, ADate) > 0 then
      WriteLn(IntToStr(MinutesBetween(Date, ADate)) + 'х. назад');
  except // стандартний блок для виведення помилок
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
На дату "1234567890" видає наступне:
13.02.2009 23:31:30
4р. назад
Варіант 2:
program DateBetween;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,
  System.DateUtils;
type // перелік потрібних перемінних
  TBetweenIn = (boYears, boMonths, boDays, boHours, boMinutes, boSeconds);
function GetBetween(ANow, AThen: TDateTime; BetweenIn: TBetweenIn): Int64;
begin
  case BetweenIn of
    boYears:    Result := YearsBetween(ANow, AThen);
    boMonths:   Result := MonthsBetween(ANow, AThen);
    boDays:     Result := DaysBetween(ANow, AThen);
    boHours:    Result := HoursBetween(ANow, AThen);
    boMinutes:  Result := MinutesBetween(ANow, AThen);
    boSeconds:  Result := SecondsBetween(ANow, AThen);
  end;
  if ANow < AThen then // минуле чи майбутнє?
    Result := - Result
end;
const // позначки...
  BeforeAfterStr: array [Boolean] of string = ('назад', 'залишилось');
  ALabels: array [TBetweenIn] of string = ('р.', 'м.', 'д.', 'г.', 'м.', 'с.');
var
  AUnixTime, tmp: Int64;
  ADate: TDateTime;
  I: TBetweenIn;
begin
  try
    Read(AUnixTime); // читаємо дані...
    ADate := UnixToDateTime(AUnixTime); // конвертуємо
    WriteLn(DateTimeToStr(ADate)); // виведемо що вийшло
    for I := Low(TBetweenIn) to High(TBetweenIn) do // підбираєм що підходить
      if GetBetween(Date, ADate, I) <> 0 then
      begin
        tmp := GetBetween(Date, ADate, I);
        WriteLn(Format('%d %s %s', [Abs(tmp), ALabels[i], BeforeAfterStr[tmp < 0]]));
        Break;
      end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.