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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 21:13   #1
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию Как разбить выбранный период по месяцам?

Привет всем!
Подскажите пожалуйста, как разбить выбранный период по месяцам?
К примеру выбран период с 01.01.2011 по 20.03.2011, необходимо сделать так чтобы программа сначала выполнила определенные манипуляции с 01.01.2011 по 31.01.2011, затем с 01.02.2011 по 28(29).02.2011, а затем с 01.03.2011 по 20.03.2011.
Подобный отчет есть в 1С ("Динамика продаж" называется). Мне необходимо сделать что-то подобное.
Может ли кто-нибудь помочь? А если еще и примерчик подкинете, то буду очень благодарен!!!
Заранее огромное спасибо.
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 29.09.2011, 22:11   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
type TMyRecordPeriod = record
       DateFrom: TDateTime;
       DateTo: TDateTime;
     end;
     TMyArrayPeriod = array of TMyRecordPeriod;

function Period(DateFrom,DateTo: TDateTime; var Periods: TMyArrayPeriod): Integer;
var Year, Month, Day: Word;
    xDate1,xDate2,xDate3: TDateTime;
begin
  //DateFrom,DateTo - время должно быть 0!
  Result:=0;
  if DateTo<DateFrom then Exit;
  DecodeDate(DateFrom,Year,Month,Day);
  xDate1:=DateFrom;
  xDate2:=IncMonth(EncodeDate(Year,Month,1),1);
  while True do begin
    xDate3:=xDate2-1;
    if xDate3>DateTo then xDate3:=DateTo;
    Inc(Result);
    SetLength(Periods,Result);
    Periods[Result-1].DateFrom:=xDate1;
    Periods[Result-1].DateTo:=xDate3;
    if xDate3=DateTo then Exit;
    xDate1:=xDate2;
    xDate2:=IncMonth(xDate1,1);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Periods: TMyArrayPeriod;
    i,Count: Integer;
    DateFrom,DateTo: TDateTime;
begin
  DateFrom:=EncodeDate(2011,5,15);
  DateTo:=EncodeDate(2011,11,25);
  Count:=Period(DateFrom,DateTo,Periods);
  Memo1.Clear;
  for i:=0 to Count-1 do
    Memo1.Lines.Add(Format('%s - %s',[FormatDateTime('yyyy-mm-dd',Periods[i].DateFrom),
                                      FormatDateTime('yyyy-mm-dd',Periods[i].DateTo)]));
  SetLength(Periods,0);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 29.09.2011 в 22:19.
Аватар вне форума Ответить с цитированием
Старый 29.09.2011, 23:30   #3
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

вот мой вариант
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Year,Month,Day:Word;
    Year2,Month2,Day2:Word;
begin
DecodeDate(DateTimePicker2.Date, Year2, Month2, Day2);
DecodeDate(DateTimePicker1.Date, Year, Month, Day);
label1.Caption:='';
label1.Caption:=DateToStr(DateTimePicker1.Date)+'-'+DateToStr(DateTimePicker1.Date+(DaysInAMonth(Year,Month)-Day))+#13#10;
DateTimePicker1.Date:=DateTimePicker1.Date+(DaysInAMonth(Year,Month)-Day)+1;
while DateTimePicker1.Date<DateTimePicker2.Date do begin
  DecodeDate(DateTimePicker1.Date, Year, Month, Day);
  label1.Caption:=label1.Caption+DateToStr(DateTimePicker1.Date)+'-'+DateToStr(DateTimePicker1.Date+(DaysInAMonth(Year,Month)-Day))+#13#10;
  DateTimePicker1.Date:=DateTimePicker1.Date+DaysInAMonth(Year,Month);
end;
label1.Caption:=label1.Caption+DateToStr(DateTimePicker2.Date-Day2+1)+'-'+DateToStr(DateTimePicker2.Date)+#13#10;
end;
на форму кидай 2 TDateTimePicker, в одном выбираешь одну дату в другом вторую, жмешь кнопку в label выводится результат
fate вне форума Ответить с цитированием
Старый 30.09.2011, 05:42   #4
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Огромнейшее всем спасибо!!!
Использовал вариант fate, так как на мой взгляд он проще.
Еще раз всем ОГРОМНОЕ спасибо!!!
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 26.12.2012, 15:24   #5
denis86
Новичок
Джуниор
 
Регистрация: 26.12.2012
Сообщений: 2
По умолчанию Как разбить выбранный период по месяцам?

Здравствуйте! Большая к вам просьба не могли бы вы поподробней написать как в экселе это сделать "разбить выбранный период по месяцам" почитав на форуме я так и не понял. У вас это получилось, может поделитесь опытом?)))
denis86 вне форума Ответить с цитированием
Старый 26.12.2012, 15:27   #6
denis86
Новичок
Джуниор
 
Регистрация: 26.12.2012
Сообщений: 2
По умолчанию разбить выбранный период по месяцам

Здравствуйте! Большая к вам просьба не могли бы вы поподробней описать как в экселе это сделать "разбить выбранный период по месяцам" почитав на форуме я так и не понял. Вы это умеете , может поделитесь опытом?)))
denis86 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По диапазону с датами построить график по месяцам, как? O_H Microsoft Office Excel 15 14.03.2014 15:04
Как обработать не выбранный ListBox sergey113 Помощь студентам 1 26.05.2011 12:40
Как разбить число на цифрыКак разбить число на цифры: 3241 => 3,2,4,1 (Pascal) Banderas123 Помощь студентам 3 07.12.2009 18:26
Как по нажатию на Button открыть документ, выбранный в OpenDialog Stranger333 Общие вопросы Delphi 4 12.11.2009 14:27
Как устроится на работу прогером в период кризиса Tlegen Свободное общение 1 20.06.2009 17:13