[原]获取指定日期WeekOfMonth

时间:2021-08-11 13:58:59

c#

 

         ///   <summary>
        
///  获取指定日期为指定年月份的第几周
        
///   </summary>
         public   int  GetWeekOfMonth(DateTime date)
        {
            DateTime firstDayInMonth 
=  DateTime.Parse( string .Format( " {0}-{1}-01 " , date.Year, date.Month));

            
// 不计入本月周的总天数,如1号为星期五,则1、2、3都不计入将要计算的周内
             int  exceptDays  =   0 ;

            
if  (firstDayInMonth.DayOfWeek  !=  DayOfWeek.Monday)
            {
                
// + 2的含义为计算时需要减去1号和date当天的日期
                
// 如果不减去date当天,则当date为星期天时,则刚好在除7后为正确值,再加1就会多一周
                exceptDays  =   7   -  ( int )firstDayInMonth.DayOfWeek  +   2 ;
            }

            
// 指定的日期减去不计算在周内的日期数
             return  (date.Day  -  exceptDays)  /   7   +  date.Day  <  exceptDays  ?   0  :  1 ;
        }

 

SQL:

 

DECLARE   @Date   DateTime  
SET   @Date   =   ' 2009-06-29 '

SELECT   CASE   WHEN  ( DATEPART (WEEKDAY, CONVERT ( DATETIME , CONVERT ( VARCHAR ( 6 ), @Date , 112 +   ' 01 ' ))  -   1 =   1   THEN  
(
DATEPART ( DAY @Date -  ( 7   -  ( DATEPART (WEEKDAY, CONVERT ( DATETIME , CONVERT ( VARCHAR ( 6 ), @Date , 112 +   ' 01 ' ))  -   1 +   2 ))  /   7   +  
CASE   WHEN   DATEPART ( DAY , @Date )   <  ( 7   -  ( DATEPART (WEEKDAY, CONVERT ( DATETIME , CONVERT ( VARCHAR ( 6 ), @Date , 112 +   ' 01 ' ))  -   1 +   2 THEN   0   ELSE   1   END
ELSE   DATEPART ( DAY @Date /   7   +   1   END   AS   ' WeekOfMonth '