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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2008, 20:05   #1
Dunpeal
Пользователь
 
Регистрация: 16.11.2006
Сообщений: 28
По умолчанию Работа с датой

Моэет быть кто-то уже сталкивался с такой проблемой. Необходимо посчитать сколько определенных дней входит в промежуток времени.
Пример: Есть у нас дата начала действия договора (дата1) и дата его окончания (дата2) необходимо посчитать сколько пятых дней входит в этот промежуток (5 января, 5 февраля, 5 марта, 5 апреля, 5 мая и т.д.)
Ну или как вариант подскажите как можно увеличивать дату на 1 день, так чтобы все было корректно... (30 января, 31 января, 1 февраля,...,27февраля, 28 февраля, 1 марта(если год високосный то 29 февраля)).
Dunpeal вне форума Ответить с цитированием
Старый 15.05.2008, 01:33   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

var
Data: TDate;

.....
Data := Data + 1;

Увеличиваем дату на 1 день. Ей Богу не вру!
Баламут вне форума Ответить с цитированием
Старый 15.05.2008, 06:32   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
Радость Ответом спрашиваю...

Цитата:
Сообщение от Баламут Посмотреть сообщение
var
Data: TDate;

.....
Data := Data + 1;

Увеличиваем дату на 1 день. Ей Богу не вру!
А на месяц, а на год?
--------------------------
Честно говоря я с датой и с времинем работаю несколько иначе.
Код:
function{ Дата и время }clocker: string;
var
mSecond, second, minute, hour, day, month, year: string;
dt: tSystemTime;
begin
   getLocalTime(dt);
   mSecond := intToStr(dt.wMilliseconds);
   second := intToStr(dt.wSecond);
   minute := intToStr(dt.wMinute);
   hour := intToStr(dt.wHour);
   day := intToStr(dt.wDay);
   month := intToStr(dt.wMonth);
   year := intToStr(dt.wYear);
   if length(mSecond) < 1 then mSecond := '000';
   if length(mSecond) < 2 then mSecond := '00' + mSecond;
   if length(mSecond) < 3 then mSecond := '0' + mSecond;
   if length(second) < 2 then
   begin
      if length(second) < 1 then second := '00'
      else second := '0' + second;
   end;
   if length(minute) < 2 then
   begin
      if length(minute) < 1 then minute := '00'
      else minute := '0' + minute;
   end;
   if length(hour) < 2 then
   begin
      if length(hour) < 1 then hour := '00'
      else hour := '0' + hour;
   end;
   if length(day) < 2 then day := '0' + day;
   if length(month) < 2 then month := '0' + month;
   result := hour+':'+minute+':'+second+':'+mSecond+' <> '+day+'-'+month+'-'+year;
end;
Это так, общий вид... Мне нравиться.
А как из date, можно извлеч, скажем день
Только strToInt(copy(dateToStr(date), 1, 2)); ???

Вот свой компонент написал для этого (вилоизменил tLabel)
Показывает дату и время, может быть полезен.

Вложения
Тип файла: rar TimeDateLabel.rar (1.6 Кб, 13 просмотров)

Последний раз редактировалось Altera; 15.05.2008 в 06:39.
Altera вне форума Ответить с цитированием
Старый 15.05.2008, 07:05   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Data: TDate;
  Day, Month, Year: WORD;
begin
Data := Date;
DecodeDate(Data, Year, Month, Day);
Inc(Year);
Data := EncodeDate(Year, Month, Day);
Edit1.Text := DateToStr(Data);
end;
Так можно. Естественно проверки диапазонов дней и месяцев (ну и лет в общем-то) нужно сделать. Функция DecodeTime тоже существует.

Последний раз редактировалось Баламут; 15.05.2008 в 07:07.
Баламут вне форума Ответить с цитированием
Старый 15.05.2008, 07:36   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Спасибо, не знал...
Altera вне форума Ответить с цитированием
Старый 15.05.2008, 12:05   #6
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

Цитата:
Сообщение от Dunpeal Посмотреть сообщение
Ну или как вариант подскажите как можно увеличивать дату на 1 день, так чтобы все было корректно... (30 января, 31 января, 1 февраля,...,27февраля, 28 февраля, 1 марта(если год високосный то 29 февраля)).
IncDay
IncMonth
Здесь описание на русском
http://delphibasics.ru/I.php
dimonbest вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с датой xDjarx БД в Delphi 38 02.05.2009 14:21
Работа с датой Aleksandr Общие вопросы Delphi 12 29.09.2008 14:01
Работа с датой [RR]Reaction Общие вопросы Delphi 3 07.04.2008 21:52
Несовпадение с датой RoZi Помощь студентам 26 28.11.2007 13:05
Манипуляции с датой и временем. Tatyana БД в Delphi 16 29.06.2007 19:19