zoukankan      html  css  js  c++  java
  • 计算日期段内有几个星期几(SQL, Delphi) ,日期段内有几个星期天

     

    declare @StartDate datetime
    declare @EndDate datetime
    declare @WeekDay INT, @WeekNum INT

    set @StartDate = '2009-10-4' 
    set @EndDate = '2009-10-25'

    set @StartDate = '2009-10-1' 
    set @EndDate = '2009-10-2'

    set @StartDate = '2009-10-3' 
    set @EndDate = '2009-10-4'

    SET @WeekDay = 1   --星期天

    SELECT @WeekNum=datediff(day
                     ,case
                         when DATEPART(weekday,@StartDate) = @WeekDay then @StartDate - 1
                         else @StartDate
                      end
                     ,case
                          when DATEPART(weekday,@EndDate) = @WeekDay then @EndDate + 1
                          else @EndDate
                      end
                 ) / 7

    IF DATEPART(weekday,@StartDate)=@WeekDay
      SELECT @WeekNum = @WeekNum + 1
    ELSE IF (@EndDate > @StartDate) AND (DATEPART(weekday,@EndDate) = @WeekDay)
      SELECT @WeekNum = @WeekNum + 1

    SELECT @WeekNum




    -----Delphi

    function WeekDayCount(pvDate1, pvDate2: TDateTime; pvWeekDay: Integer): Integer;
    var
      lvDate1, lvDate2: TDateTime;
      lvWeekNum: Real;
      lvDay: Integer;
    begin
      lvDate1 := Trunc(pvDate1);
      lvDate2 := Trunc(pvDate2);

      if DayOfWeek(pvDate1) = pvWeekDay then lvDate1 := IncDay(lvDate1, -1);
      if DayOfWeek(lvDate2) = pvWeekDay then lvDate2 := IncDay(lvDate2, +1);

      //相差的天数是是多少个星期
      Result := Trunc(WeekSpan(lvDate1, lvDate2));

      //如果最后一天是那天则加1,注意是pvDate2不是lvDate2
      if DayOfWeek(pvDate1) = pvWeekDay then Inc(Result)
      else if pvDate2 > pvDate1 then
        if DayOfWeek(pvDate2) = pvWeekDay then Inc(Result);
    end;



    type

      TWeekDay = 1..7;

      TWeekDays = set of TWeekDay;

    function WeekDayCountEx(pvDate1, pvDate2: TDateTime; pvWeekDays: TWeekDays):
      Integer;
    var
      lvDate1, lvDate2, lvTempDate: TDateTime;
    begin
      lvDate1 := Trunc(pvDate1);
      lvDate2 := Trunc(pvDate2);
      lvTempDate := lvDate1;
      Result := 0;
      while lvTempDate <= lvDate2 do
      begin
        if DayOfWeek(lvTempDate) in pvWeekDays then Inc(Result);
        lvTempDate := IncDay(lvTempDate, 1);
      end;
    end;



     

  • 相关阅读:
    C++高级程序员(廊坊+高薪)欢迎各种漂回家!(该职位已截止)
    utf8_unicode_ci和utf8_general_ci区别
    Percentencoding
    libiconv GNU Project Free Software Foundation (FSF)
    2013年1月6日北京交流会:当当网如何打造个性化推荐&精准营销生态系统
    COM Vs .NET (Qt ActiveQt)
    新一篇: Unicode字符编码规范 实例详细介绍各种字符集编码转换问题
    甩开外包,雄踞榜首:揭开“宫爆老奶奶”成功的秘密
    awk使用命令
    API SOCKET基础(三)网络字节序与主机字节序的转换
  • 原文地址:https://www.cnblogs.com/DKSoft/p/1444682.html
Copyright © 2011-2022 走看看