Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2007, 10:37   #1
John_chek
Форумчанин
 
Аватар для John_chek
 
Регистрация: 24.01.2007
Сообщений: 108
По умолчанию Расчет стажа работы

Добрый день! Подскажите, как можно рассчитать стаж работника в организации по типу лет, месяцев, дней?
Делаю так, возвращаю колличество лет, месяцев и дней между датой регистрации и текущей даты:
Код:
DBEditEh2.Text := IntToStr(YearsBetween(DM.DSKart.FieldValues['DT_REG'], date));
DBEditEh4.Text := IntToStr(MonthsBetween(DM.DSKart.FieldValues['DT_REG'], date));
DBEditEh3.Text := IntToStr(DaysBetween(DM.DSKart.FieldValues['DT_REG'], date));
Количество лет, впринципе вычесляется правильно, но месяц и дата это по сути равенство между годом и вообще между собой!
Пример: Дата приема сотрудника - 09.04.2005г. Сегодня - 10.04.2007.
Нужно в результате: лет=2, месяцев=0, дней=1!

Последний раз редактировалось John_chek; 10.04.2007 в 10:39.
John_chek вне форума Ответить с цитированием
Старый 10.04.2007, 13:23   #2
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

Преобразуй по отдельности: годы, месяцы и дни; произведи вычисления и присвой своему полю(только точки плюсовать не забывай).
Трофимов Александр вне форума Ответить с цитированием
Старый 10.04.2007, 15:14   #3
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

John_chek
вот то что тебе нужно...
писал для себя
Код:
function Age(Birth,Second:TDate):string;
var
  a:TDate;
  year,mes,den:string;
  y,m,d:integer;
begin
  if birth<Second then
  begin
    a:=birth;
    y:=YearsBetween(a,Second);
    a:=incYear(a,y);
    m:=Monthsbetween(a,Second);
    a:=incMonth(a,m);
    d:=daysbetween(a,second);
    if (MonthOf(birth) = 2) and (d >= 28 + byte(IsInLeapYear(birth))) then
    begin
      inc(m, 1);
      dec(d, 28 + byte(IsInLeapYear(birth)));
    end;
    case y of
      1: year:= ' год';
      2,3,4: year:= ' года';
    end;
    case m of
      1: mes:=' меcяц';
      2,3,4: mes:=' месяца';
      5,6,7,8,9,10,11,12: mes:=' месяцев';
    end;
    case d of
      0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,25,26,27,28,29,30: den:=' дней';
      1,21,31: den:=' день';
      2,3,4,22,23,24: den:=' дня';
    end;
    if y>0 then
      result := IntToStr(y)+year+' '+ IntToStr(m)+mes+' '+IntToStr(d)+den
    else
      result := IntToStr(m)+mes+' '+IntToStr(d)+den;
  end
  else
    Result:='Ошибка!';
end;
да, не зубудь про модуль DateUtils
dron-s вне форума Ответить с цитированием
Старый 12.04.2007, 17:20   #4
beso
Пользователь
 
Регистрация: 02.04.2007
Сообщений: 37
По умолчанию

pamagite rebiata na Kalkulatore Kod.! a kak nachinat? logicheski?
Изображения
Тип файла: jpg calc_180.jpg (12.0 Кб, 152 просмотров)
beso вне форума Ответить с цитированием
Старый 12.04.2007, 17:30   #5
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

beso, создайте новую тему с нормальным вопросом.
Alar вне форума Ответить с цитированием
Старый 13.04.2007, 12:41   #6
r-sol
Пользователь
 
Регистрация: 05.04.2007
Сообщений: 10
По умолчанию

мне кажется, неправильно сравнивать отдельно дни, месяцы и годы, ведь там и в разных месяцах разное число дней, и годы високостные и нет - это же все надо учесть. А если использовать объекст типа
TDateTime - ведь он содержит в виде целого числа число дней, и если вычесть из одного объекта с первой датой объект со второй датой, то полученный третий объект того же типа будет содержать число дней между ними и уже это готовое число может выдать либо в виде строки, либо в виде 3 чисел дни-мес-годы - это и будет искомый результат (только он приплюсует к нему свою исходную дату 12/30/1899, но вычесть ее оттуда уже дело техники),
r-sol вне форума Ответить с цитированием
Старый 13.04.2007, 13:38   #7
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

r-sol
а зачем тогда компания Borland написала модуль DateUtils?
именно для того чтобы облегчить работу с датами...
кста, в моём примере учитывается високосный и невисокосный год...
посмотри внимательнее
dron-s вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одноразовый расчет ячейки АLексаNдр Microsoft Office Excel 6 11.08.2008 16:27
Расчет численности популяции MyVLink Паскаль, Turbo Pascal, PascalABC.NET 2 07.06.2008 05:30
Расчет средневзешенного zoman Microsoft Office Excel 2 05.12.2007 10:15
Delphi: расчет по таблице Натуся БД в Delphi 1 31.10.2007 00:26