Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужна помощь с датами

468
23 января 2005 года
Jackal
48 / / 20.09.2000
Доброго всем времени суток!
Есть такая трабла. Имеется на форме два DateTimePicker'а, каким образом посчитать количество "рабочих" дней между двумя датами?
если можно, приведите код...
Зарание всем спасибо... ;)
301
23 января 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by Jackal
Доброго всем времени суток!
Есть такая трабла. Имеется на форме два DateTimePicker'а, каким образом посчитать количество "рабочих" дней между двумя датами?
если можно, приведите код...
Зарание всем спасибо... ;)


 
Код:
TDate frst=DateTimePicker1->Date,last=DateTimePicker2->Date;
 int WorkDays=0;
 for(;frst<=last;frst++)
  if(frst.DayOfWeek()!=1&&frst.DayOfWeek()!=7)WorkDays++;
 ShowMessage(IntToStr(WorkDays)+" work days");

Программа считает количество не суббот и не воскресений между двумя датами, считая первый и последний выбранные дни. Если тебя интересует программа, учитывающая праздники - запость их список с датами. Вот.
И оставь свое спасибо себе (пока)! Почему все думают, что сказав "заранее спасибо" они получат ответ с большей вероятностью? Бесит, честное слово.
468
23 января 2005 года
Jackal
48 / / 20.09.2000
Цитата:
Originally posted by lord Kelvin

 
Код:
TDate frst=DateTimePicker1->Date,last=DateTimePicker2->Date;
 int WorkDays=0;
 for(;frst<=last;frst++)
  if(frst.DayOfWeek()!=1&&frst.DayOfWeek()!=7)WorkDays++;
 ShowMessage(IntToStr(WorkDays)+" work days");

Программа считает количество не суббот и не воскресений между двумя датами, считая первый и последний выбранные дни. Если тебя интересует программа, учитывающая праздники - запость их список с датами. Вот.
И оставь свое спасибо себе (пока)! Почему все думают, что сказав "заранее спасибо" они получат ответ с большей вероятностью? Бесит, честное слово.


Вот теперь спасибо.
И я его сказал, для того что народ, просматривает сообщения, а не просто пропускает. Ну а если помогает, то ОГРОМНОЕ ПАСИБА! ;)

468
23 января 2005 года
Jackal
48 / / 20.09.2000
Еще такой вопросик: как сделать так чтобы прога сама просчитывала дни через день в рамках времменного интервала и соответственно считала колво часов в день, допустим 8, т.е. (если начинается с любого дня недели, то считался бы через день (... Пн., Ср., Пт., Вс., Вт., Чт., и т.д.). Если попадает на выходной, то колво часов в выходной увеличивается, скажем, в 2 раза?
2.7K
23 января 2005 года
sys33
55 / / 16.12.2004
Цитата:
Originally posted by Jackal
Еще такой вопросик: как сделать так чтобы прога сама просчитывала дни через день в рамках времменного интервала и соответственно считала колво часов в день, допустим 8, т.е. (если начинается с любого дня недели, то считался бы через день (... Пн., Ср., Пт., Вс., Вт., Чт., и т.д.). Если попадает на выходной, то колво часов в выходной увеличивается, скажем, в 2 раза?


А тебе случайно не для гостиницы марриот такая прога понадобилась?

468
23 января 2005 года
Jackal
48 / / 20.09.2000
Цитата:
Originally posted by sys33

А тебе случайно не для гостиницы марриот такая прога понадобилась?


нет, не для нее... :)

301
23 января 2005 года
lord Kelvin
897 / / 08.11.2004
 
Код:
TDate frst=DateTimePicker1->Date,last=DateTimePicker2->Date;
 int WorkHours=0;
 for(;frst<=last;frst+=2)
  if(frst.DayOfWeek()!=1)WorkHours+=8;
  else WorkHours+=16;
 ShowMessage(IntToStr(WorkHours)+" work hours");
468
23 января 2005 года
Jackal
48 / / 20.09.2000
Цитата:
Originally posted by lord Kelvin
 
Код:
TDate frst=DateTimePicker1->Date,last=DateTimePicker2->Date;
 int WorkHours=0;
 for(;frst<=last;frst+=2)
  if(frst.DayOfWeek()!=1)WorkHours+=8;
  else WorkHours+=16;
 ShowMessage(IntToStr(WorkHours)+" work hours");


Пасиба!

7.0K
24 января 2005 года
xim
19 / / 29.09.2004
Цитата:
Originally posted by Jackal
Доброго всем времени суток!
Есть такая трабла. Имеется на форме два DateTimePicker'а, каким образом посчитать количество "рабочих" дней между двумя датами?
если можно, приведите код...
Зарание всем спасибо... ;)



Этот выриант побыстрее:

Код:
#include <math.h>

char  *weekDays={5,5,4,3,2,1,0};
DWORD *segmDays={0L,0L,0L};

DWORD fl_days=(DWORD)floor(DateTimePicker2->Date.Value)-
              (DWORD)floor(DateTimePicker1->Date.Value)+1L,
      f_dywk=DateTimePicker1->Date.DayOfWeek(),
      l_dywk=DateTimePicker2->Date.DayOfWeek();

segmDays[0]=8L-f_dywk;
segmDays[1]=(fl_days-segmDays[0])/7L*7L;
segmDays[2]=fl_days-segmDays[1]-segmDays[0];

DWORD workDays=weekDays[f_dywk-1]+segmDays[1]*5L+
               weekDays[7L-f_dywk];
7.0K
24 января 2005 года
xim
19 / / 29.09.2004
Прошу прощения за пост выше - написал и не проверил. Это работает:
Код:
long  fl_days= (long)floor(DateTimePicker2->Date.Val)-
                  (long)floor(DateTimePicker1->Date.Val);
   if(fl_days>=0)
   {
      char  ftDays[]={5,4,3,2,1,0,0},
            ltDays[]={1,2,3,4,5,5,5};

      long  workDays=1L,
            f_dywk=DateTimePicker1->Date.DayOfWeek()-1,
            l_dywk=DateTimePicker2->Date.DayOfWeek()-1;
            f_dywk=!f_dywk?7L:f_dywk;
            l_dywk=!l_dywk?7L:l_dywk;
      long  f_days=8L-f_dywk;

      if(fl_days>=f_days)
      {
         workDays+=ftDays[f_dywk-1L];
         if(fl_days-l_dywk-f_days>0L)
         workDays+=(fl_days-f_days)/7L*5L;
         workDays+=ltDays[l_dywk-1L]-1L;
      }else workDays+=ltDays[l_dywk-1]-ltDays[f_dywk-1];

      // AnsiString(workDays); - result
   }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог