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");
Нужна помощь с датами
Есть такая трабла. Имеется на форме два DateTimePicker'а, каким образом посчитать количество "рабочих" дней между двумя датами?
если можно, приведите код...
Зарание всем спасибо... ;)
Цитата:
Originally posted by Jackal
Доброго всем времени суток!
Есть такая трабла. Имеется на форме два DateTimePicker'а, каким образом посчитать количество "рабочих" дней между двумя датами?
если можно, приведите код...
Зарание всем спасибо... ;)
Доброго всем времени суток!
Есть такая трабла. Имеется на форме два DateTimePicker'а, каким образом посчитать количество "рабочих" дней между двумя датами?
если можно, приведите код...
Зарание всем спасибо... ;)
Код:
Программа считает количество не суббот и не воскресений между двумя датами, считая первый и последний выбранные дни. Если тебя интересует программа, учитывающая праздники - запость их список с датами. Вот.
И оставь свое спасибо себе (пока)! Почему все думают, что сказав "заранее спасибо" они получат ответ с большей вероятностью? Бесит, честное слово.
Цитата:
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");
int WorkDays=0;
for(;frst<=last;frst++)
if(frst.DayOfWeek()!=1&&frst.DayOfWeek()!=7)WorkDays++;
ShowMessage(IntToStr(WorkDays)+" work days");
Программа считает количество не суббот и не воскресений между двумя датами, считая первый и последний выбранные дни. Если тебя интересует программа, учитывающая праздники - запость их список с датами. Вот.
И оставь свое спасибо себе (пока)! Почему все думают, что сказав "заранее спасибо" они получат ответ с большей вероятностью? Бесит, честное слово.
Вот теперь спасибо.
И я его сказал, для того что народ, просматривает сообщения, а не просто пропускает. Ну а если помогает, то ОГРОМНОЕ ПАСИБА! ;)
Еще такой вопросик: как сделать так чтобы прога сама просчитывала дни через день в рамках времменного интервала и соответственно считала колво часов в день, допустим 8, т.е. (если начинается с любого дня недели, то считался бы через день (... Пн., Ср., Пт., Вс., Вт., Чт., и т.д.). Если попадает на выходной, то колво часов в выходной увеличивается, скажем, в 2 раза?
Цитата:
Originally posted by Jackal
Еще такой вопросик: как сделать так чтобы прога сама просчитывала дни через день в рамках времменного интервала и соответственно считала колво часов в день, допустим 8, т.е. (если начинается с любого дня недели, то считался бы через день (... Пн., Ср., Пт., Вс., Вт., Чт., и т.д.). Если попадает на выходной, то колво часов в выходной увеличивается, скажем, в 2 раза?
Еще такой вопросик: как сделать так чтобы прога сама просчитывала дни через день в рамках времменного интервала и соответственно считала колво часов в день, допустим 8, т.е. (если начинается с любого дня недели, то считался бы через день (... Пн., Ср., Пт., Вс., Вт., Чт., и т.д.). Если попадает на выходной, то колво часов в выходной увеличивается, скажем, в 2 раза?
А тебе случайно не для гостиницы марриот такая прога понадобилась?
Цитата:
Originally posted by sys33
А тебе случайно не для гостиницы марриот такая прога понадобилась?
А тебе случайно не для гостиницы марриот такая прога понадобилась?
нет, не для нее... :)
Код:
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");
int WorkHours=0;
for(;frst<=last;frst+=2)
if(frst.DayOfWeek()!=1)WorkHours+=8;
else WorkHours+=16;
ShowMessage(IntToStr(WorkHours)+" work hours");
Цитата:
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");
int WorkHours=0;
for(;frst<=last;frst+=2)
if(frst.DayOfWeek()!=1)WorkHours+=8;
else WorkHours+=16;
ShowMessage(IntToStr(WorkHours)+" work hours");
Пасиба!
Цитата:
Originally posted by Jackal
Доброго всем времени суток!
Есть такая трабла. Имеется на форме два DateTimePicker'а, каким образом посчитать количество "рабочих" дней между двумя датами?
если можно, приведите код...
Зарание всем спасибо... ;)
Доброго всем времени суток!
Есть такая трабла. Имеется на форме два 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];
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];
Код:
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
}
(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
}