一般跨5周,但2004.10跨了6周,就要得到6.找了几个函数好象都不行.

解决方案 »

  1.   

    自己算好了,1,计算天数,设为k2,计算第一天是否为该周第一天,设为n 3, 计算最后一天是否为该周倒数第一天,设为m4, 结果为:r=(k - n - m ) div 7 ;           if n<>0 then r=r+1           if m<>0 then r=r+1
      

  2.   

    给出日期,如何知道是这一年的第几周?function WeekofYear(Date: TDate): integer; 
    varFirstDay, FirstWeekEnd, NowWeekEnd: TDate;Year, Month, Day: word;beginDecodeDate(Date, Year, Month, Day);FirstDay := EncodeDate(Year, 1, 1);FirstWeekEnd := FirstDay + 7 - DayofWeek(FirstDay);NowWeekEnd := Date + 7 - DayofWeek(Date);Result := Round(NowWeekEnd - FirstWeekEnd) div 7 + 1;end;
      

  3.   

    uses DateUtilsfunction WeeksBetween(const ANow, AThen: TDateTime): Integer;I := WeeksBetween(StrToDate('2004-3-1'),  EndOfTheMonth(StrToDate('2004-3-1'));
      

  4.   

    这是一个非常有意思的问题,我想了一下,得到下面的解决思路:1、最小的月是28天,则最少也要跨四周,最多跨五周;2、最大的月是31天,则最少也要跨五周,最多跨六周;3、如果本月是28天,只有当本月1号是星期日时,本月才只跨四周,否则都跨五周;4、如果本月是29天,则无论什么情况,本月都跨且只跨五周;5、如果本月是30天,则只有当本月的1号是星期六时,本月才跨六,其它情况都要跨五周;6、如果本月是31天,则只有当本月的1号是星期五或星期六时,本月才跨六周,其它情况者只跨五周。因此可得下面的解决算法:
    uses DateUtils  //要引用DateUtils单元function GetWeekCount(AYear, AMonth: Word): Word;
    var
      DayCount, DW: Word;  //DW: DayOfWeek
    begin
      DayCount := DaysInAMonth(AYear, AMonth);
      Case DayCount of
        28:
        begin
          DW := DayOfWeek(StrToDate(IntToStr(AYear) + '-' + IntToStr(AMonth) + '-' + '1'));
          if DW = 1 then Result := 4
          else Result := 5;
        end;
        29: Result := 5;
        30:
        begin
          DW := DayOfWeek(StrToDate(IntToStr(AYear) + '-' + IntToStr(AMonth) + '-' + '1'));
          if DW = 7 then Result := 6
          else Result := 5;
        end;
        31:
        begin
          DW := DayOfWeek(StrToDate(IntToStr(AYear) + '-' + IntToStr(AMonth) + '-' + '1'));
          if DW > 4 then Result := 6
          else Result := 5;
        end;
      end;
    end;
      

  5.   

    可以用以下这个函数看看:
    function WeekOfTheMonth(const AValue: TDateTime): Word; overload;
    function WeekOfTheMonth(const AValue: TDateTime; var AYear, AMonth: Word): Word; overload;   这个函数的返回值是1---6.