匆忙写就,没有考虑代码的效率,也不知道有没有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;
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;