如果不考虑法定假日和周末调班的那种,比如国庆节七天调休那样的情况。只跳过周末双休,可以试试这几个。我从畅心大神那里学来的。
1、迭代
- = let fx=(x,y)=>List.Accumulate({1..y},x,(s,c)=>Date.AddDays(s,List.Max({1,3-Date.DayOfWeek(s,5)})))
- in fx(#date(2018,8,1),3)
复制代码 2、递归
- = let fx=(x,y)=>if y=0 then x else @fx(Date.AddDays(x,1),y-Byte.From(Date.DayOfWeek(x,5)>1))
- in fx(#date(2018,8,1),3)
复制代码 3、序列构造,依据星期几找规律
- = let fx=(x as date,y as number)=>
- Date.AddDays( x,
- List.Skip( List.Alternate( {1..21},
- 2,
- 5,
- 6-Date.DayOfWeek(x,6)
- ),
- Byte.From(Date.DayOfWeek(x,0)=6) ){y-1} )
- in fx(#date(2018,8,1),3)
复制代码 如果考虑中国式放假,周末调班的算工作日,法定假日不算工作日。那事先要做一个假日表和调班表
- let
- 假日 = Table.TransformColumns(Excel.CurrentWorkbook(){[Name="假日"]}[Content],{},Date.From)[假日], //制作某年度内的法定假日表
- 调班 = Table.TransformColumns(Excel.CurrentWorkbook(){[Name="调班"]}[Content],{},Date.From)[调班], //制作某年度内的周末调班表
-
- Date.AfterWorkDays = let
- fx=(x,y)=>
- if y=0
- then x
- else @fx( Date.AddDays(x,1),
- y-( if List.Contains(调班,Date.AddDays(x,1)) then 1 else
- if List.Contains(假日,Date.AddDays(x,1)) then 0 else
- Byte.From(Date.DayOfWeek(x,5)>1) ) )
- in fx,
- test = Date.AfterWorkDays(#date(2018,9,27),3)
- in
- test
复制代码
|