求一个按月分周统计算法,比如当我选择十月,算出有六周(1-2号为第一周),当选择第三周的时候算出时间段为10-16号。

kingbenz 2004-10-11 11:04:52
求一个按月分周统计算法,比如当我选择十月,算出有六周(1-2号为第一周),当选择第三周的时候算出时间段为10-16号。
...全文
116 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
firstshine 2004-10-11
  • 打赏
  • 举报
回复
匆忙写就,没有考虑代码的效率,也不知道有没有Bug,你看看,自己调试一下吧

Function GetWeekCount(iYear,iMonth:Integer):Integer;
var
iDay,iLastDay,iWeek:Integer;
dtTime:TDateTime;
begin
Result:=0;

iLastDay:=DaysInAMonth(iYear,iMonth);//一月之中的最后一天

for iDay:=1 to iLastDay do
begin
dtTime:=EncodeDate(iYear,iMonth,iDay);

if iDay=1 then
iWeek:=1
else
iWeek:=DayOfWeek(dtTime);

if iWeek=1 then Inc(Result);
end;
end;

Function GetWeekSpan(iYear,iMonth,iWeekNo:Integer):String;
var
iTotalWeek,iLastDay,iDay,iTemp,iWeek:Integer;
dtTime:TDateTime;
begin
Result:='';

iTotalWeek:=GetWeekCount(iYear,iMonth);
if iTotalWeek<iWeekNo then exit;

iLastDay:=DaysInAMonth(iYear,iMonth);//一月之中的最后一天

iTemp:=0;
for iDay:=1 to iLastDay do
begin
dtTime:=EncodeDate(iYear,iMonth,iDay);

if iDay=1 then
iWeek:=1
else
iWeek:=DayOfWeek(dtTime);

if iWeek=1 then Inc(iTemp);

if iTemp=iWeekNo then
begin
if iWeek=1 then
Result:='Begin at '+IntToStr(iYear)+'-'+IntToStr(iMonth)+'-'+IntToStr(iDay);
if (iWeek=7) or (iDay=iLastDay) then
Result:=Result+#13+'End at '+IntToStr(iYear)+'-'+IntToStr(iMonth)+'-'+IntToStr(iDay);
end
else if iTemp>iWeekNo then
Break;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(GetWeekCount(2004,10)));
ShowMessage(GetWeekSpan(2004,10,3))
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧