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

解决方案 »

  1.   

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