学校有春季学期,秋季学期
每学期开始为第一周
我想知道当天所在周是此学期的第几周?
要知道如秋季学期,从9月1日起到次年的元月20日左右,应该共有22个周左右现在,知道了开学日期(9月1日),如何求出当天所在周是本学期的第几周?这个问题我一直没有好的答案,谁有好的答案?

解决方案 »

  1.   

    第几周=((当前日期-开学日期) div 7 )+1;
      

  2.   

    use DateUtilsWeekOfTheYear这个?
      

  3.   

    WeekOfTheYear 是一年中的向几周, 而学校的周次是跨年, 如元月1日,不是第一周,因为秋季学期还没结束
      

  4.   

    use DateUtils 好像没有恰当的函数
      

  5.   

    Unit DateUtils
    function DayOfTheWeek(const AValue: TDateTime): Word; 描述:对于给定的TDateTime类型的日期时间,使用 DayOfTheWeek 函数能得到该日期是该星期的第几天。DayOfTheWeek 函数的返回数值为 1 到 7,其中 1 表示星期一,而 7 表示星期日。注意:DayOfTheWeek 是 ISO 8601 标准的(此标准为星期一是一周的第一天)。
      

  6.   

    9月1号所在周,当前日期所在周weekoftheyear
    9月1号当前周的第几天。当日在当周的第几天。
      

  7.   

    第一步:算出9月1日那周的周日是几年几月几日(注:每周的第一天是周日来的)比如获取9月1日星期几,就往前推“几”天(可能有点乱,周日算0,周一计1,以此类推)
    然后:第几周=((当前日期-第一步的“几年几月几日”) div 7 )+1就行了
      

  8.   

    之后加上一个条件判断是周几不行么???procedure TForm1.Button2Click(Sender: TObject);
    var
      Today,Reference:TDate;
      ReferenceWeek, thisWeek, weekBetween:integer;
    begin
      Today := StrToDate(Edit2.Text);
      Reference := StrToDate('02/05/2010');
      weekBetween := Round(Today - Reference) div 7 +1;
      if DayOfTheWeek(Reference)>DayOfTheWeek(Today) then weekBetween := weekBetween + 1;
      Edit1.Text := IntToStr(weekBetween);
    end;
      

  9.   

    1. 先用DateUtils单元中的DaysBetween函数求得当前日期和开学日期之间的天数。function DaysBetween(const ANow: TDateTime; const AThen: TDateTime): Integer;2. 用 天数 div 7 得到周数,如果 天数 mod 7 > 0 (不能整除),则周数加1大致是:Days := DaysBetween(Now, DateFrom); //DateFrom是开学日期
    Weeks := Days div 7;
    if Days mod 7 > 0 then
      Inc(Weeks);
      

  10.   


    唔如果是这样的话。可以试试看这个办法。1. 判断是否为同一年。2. 如果是同一年,用DateUtils里的函数WeekOfTheYear,分别取得两个日期(开学日期、当天)的所在周,相减,加1,即可。3. 如果不是同一年,则先用DateUtils里的函数WeeksInAYear,取得开学日期所在周数,和开学当年总计周数,相减得到该学期在开学当年的周数,再加上当天在本年的周数。大致是:
    var
      FromYear, FromMonth, FromDay,
      ToYear, ToMonth, ToDay : word;
      Week1, Week2, WeekInFromYear, WeeksBetween: integer;
    begin
      DecodeDate(FromDate, FromYear, FromMonth, FromDay);
      DecodeDate(Now, ToYear, ToMonth, ToDay);
      Week1 := WeekOfTheYear(FromDate);
      Week2 := WeekOfTheYear(Now);  if FromYear = ToYear then
      begin
        WeeksBetween := Week2 - Week1 + 1;
      end else
      begin
        WeekInFromYear := WeeksInAYear(FromDate);
        WeeksBetween := (WeekInFromYear - Week1 + 1) + Week2;
      end;
    end;没编译过,试试看吧。这是跨一年的,如果要跨多年(学期一般不会吧),作循环即可。
      

  11.   

    //希望对你有帮助
    function TForm1.getStartWeek(begintime, endtime: tdatetime): integer;
    var
      AValue:integer;
      keyTime:tdatetime;
    begin
      result:=0;  avalue:=DayOfTheWeek(begintime);//开学时间是周几
      //开学日期所在周的周一日期
      case avalue of
        1:keytime:=begintime;
        2:keytime:=begintime-1;
        3:keytime:=begintime-2;
        4:keytime:=begintime-3;
        5:keytime:=begintime-4;
        6:keytime:=begintime-5;
        7:keytime:=begintime-6;
      end;  result:=((trunc(endtime)-trunc(keytime)) div 7)+1;
    end;
      

  12.   

    结贴了,  
    buding79
     
    (赵云) 回答得不错.