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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2010, 10:42   #1
Alex003
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 13
Печаль из диапазона двух выбранных дат, отдельно вывести(перечислить) дни, месяцы, годы

Подскажите пожалуйста.
На форме два компонента datetimepicker, нужно из диапазона двух выбранных дат, отдельно вывести(перечислить) дни, месяцы, годы.

Напр.: от 20.04.09 до 15.10.13; месяцы, 04 05 06 07 08 09 10 11 12 01..12 01.. и так до конца второго компонента(13-го года).
Alex003 вне форума Ответить с цитированием
Старый 11.05.2010, 13:48   #2
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

если еще не разобрался: подключи модуль dateutils
и далее используйте функции для работы с датой:
YearOf(d)-возвращает год указанной в скобках даты (d:Tdate возвращает инт)
MonthOf()-аналогично только возвращает №месяца указанной в скобках даты
DayOf()-\\-\\ день указанной в скобках даты
DaysInMonth()-количество дней в месяце
и далее можешь использовать цикл+исключит ситуации (когда дата 1 datetimepicker < даты 2-го datetimepicker)
возможно есть еще спец функции для таких задач тогда гугл
Tanuska___:) вне форума Ответить с цитированием
Старый 11.05.2010, 21:59   #3
Alex003
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Tanuska___:) Посмотреть сообщение
подключи модуль dateutils
и далее используйте функции для работы с датой:
Mодуль подключил.
Что-то одним циклом не получатся выдернуть все месяцы из диапазона дат от picker1 до picker, а двумя получается ерунда.
Или опыта не хватает, или ума.
Alex003 вне форума Ответить с цитированием
Старый 12.05.2010, 09:18   #4
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

вот не очень красиво конечно. если сильно не вчитываться то результат норм выдает
Код:
  d1:=DateTimePicker1.DateTime;//дата начала периода
  d2:=DateTimePicker2.DateTime;//дата окончания
     if YearOf(d1)<YearOf(d2)
     then
         begin

    g:=YearOf(d1);//год
    m:=MonthOf(d1);//месяц
//i-день
     for i:=DayOf(d1) to  DaysInMonth(m)do
 begin
 Memo1.Lines.Add(IntToStr(i));
 end;
   Memo2.Lines.Add(IntToStr(m));
     for m:=(MonthOf(d1)+1) to 12 do
     begin

for i:=1 to  DaysInMonth(m)do
 begin
 Memo1.Lines.Add(IntToStr(i));
 end;

   Memo2.Lines.Add(IntToStr(m));
   end;
  Memo3.Lines.Add(IntToStr(g));

   for g:=(YearOf(d1)+1) to (YearOf(d2)-1) do
     begin
  for m:=1 to 12 do
     begin

for i:=1 to  DaysInMonth(m)do
 begin
 Memo1.Lines.Add(IntToStr(i));
 end;
   Memo2.Lines.Add(IntToStr(m));
   end;
  Memo3.Lines.Add(IntToStr(g));
   end;
      g:=YearOf(d2);
     for m:=1 to (MonthOf(d2)-1) do
     begin
  for i:=1 to  DaysInMonth(m) do
 begin
 Memo1.Lines.Add(IntToStr(i));
 end;
   Memo2.Lines.Add(IntToStr(m));
   end;
  Memo3.Lines.Add(IntToStr(g));

   g:=YearOf(d2);
    m:=MonthOf(d2);
   for i:=1 to  DayOf(d2) do
 begin
 Memo1.Lines.Add(IntToStr(i));
 end;
   Memo2.Lines.Add(IntToStr(m));
   end
   else
   if YearOf(d1)=YearOf(d2)
   then
   begin
   g:=YearOf(d1);
   for m:=1 to  (MonthOf(d2)-1) do
 begin

   for i:=1 to  DaysInMonth(m) do
 begin
 Memo1.Lines.Add(IntToStr(i));
 end;
   Memo2.Lines.Add(IntToStr(m));
   end;
   m:=MonthOf(d2);
   for i:=1 to  DayOf(d2) do
 begin
 Memo1.Lines.Add(IntToStr(i));
 end;
   Memo2.Lines.Add(IntToStr(m));
    Memo3.Lines.Add(IntToStr(g));
   end
   else
   if YearOf(d1)>YearOf(d2)
   then Application.MessageBox('Некорректный период','Ошибка',MB_OK);
end;
Алгоритм так себе . можно доработать красиво.
Tanuska___:) вне форума Ответить с цитированием
Старый 12.05.2010, 09:39   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы делал так
Код:
var d:TDateTime;
begin
 d:=DateTimePicker1.Date;
 Memo1.Lines.Clear;
 while d<DateTimePicker2.DateTime do begin
  Memo1.Lines.Add(FormatDateTime('dd   mm   yyyy',d));
  d:=IncDay(d);
 end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2010, 22:03   #6
Alex003
Пользователь
 
Регистрация: 24.02.2010
Сообщений: 13
По умолчанию

Stilet
Большое спасибо, очень помогли.
Tanuska___
Вас тоже благодарю за внимание.

Удачи вам!

Последний раз редактировалось Alex003; 12.05.2010 в 22:07.
Alex003 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация случайных дат из диапазона, как реализовать? antoha73 Общие вопросы Delphi 7 24.03.2010 07:15
Как перечислить переменные? Алексей11111 Microsoft Office Excel 0 19.11.2009 08:07
Сортировать месяцы соответственно их номера, а не по алфавиту в сводной таблице maxic Microsoft Office Excel 4 10.10.2008 17:51
Как программно перечислить все формы приложения? Avron Общие вопросы Delphi 5 07.09.2007 08:51
Выбор Диапазона Дат Chepa БД в Delphi 2 02.02.2007 10:25