Date Picker控件联动计算30个工作日后日期(排除周末及银行假日)
实现30个工作日后日期计算(排除周末与银行假日)
功能需求
当用户通过Date Picker控件(StartDate)选择日期后,文本框自动显示30个工作日后的日期(需排除周末和银行假日)。
当前实现代码
Switch ( CountIf( BankHolidayDates, BankHolidayDate >= StartDate.SelectedDate, BankHolidayDate <= DateAdd( StartDate.SelectedDate, Value(gvDaysToDeadline) + RoundDown(gvDaysToDeadline / 5, 0)*2+ Switch( Weekday(StartDate.SelectedDate), 5,If(Mod(gvDaysToDeadline, 5)>0,2,0), 4,If(Mod(gvDaysToDeadline, 5)>1,2,0), 3,If(Mod(gvDaysToDeadline, 5)>2,2,0), 2,If(Mod(gvDaysToDeadline, 5)>3,2,0), 1,If(Mod(gvDaysToDeadline, 5)>4,2,0) ) ) ), 0,DateAdd( StartDate.SelectedDate, Value(gvDaysToDeadline) + RoundDown(gvDaysToDeadline / 5, 0)*2+ Switch( Weekday(StartDate.SelectedDate), 5,If(Mod(gvDaysToDeadline, 5)>0,2,0), 4,If(Mod(gvDaysToDeadline, 5)>1,2,0), 3,If(Mod(gvDaysToDeadline, 5)>2,2,0), 2,If(Mod(gvDaysToDeadline, 5)>3,2,0), 1,If(Mod(gvDaysToDeadline, 5)>4,2,0) ) ), 1,DateAdd( StartDate.SelectedDate, Value(gvDaysToDeadline+1) + RoundDown((gvDaysToDeadline+1) / 5, 0)*2+ Switch( Weekday(StartDate.SelectedDate), 5,If(Mod(gvDaysToDeadline+1, 5)>0,2,0), 4,If(Mod(gvDaysToDeadline+1, 5)>1,2,0), 3,If(Mod(gvDaysToDeadline+1, 5)>2,2,0), 2,If(Mod(gvDaysToDeadline+1, 5)>3,2,0), 1,If(Mod(gvDaysToDeadline+1, 5)>4,2,0) ) ), 2,DateAdd( StartDate.SelectedDate, Value(gvDaysToDeadline+2) + RoundDown((gvDaysToDeadline+2) / 5, 0)*2+ Switch( Weekday(StartDate.SelectedDate), 5,If(Mod(gvDaysToDeadline+2, 5)>0,2,0), 4,If(Mod(gvDaysToDeadline+2, 5)>1,2,0), 3,If(Mod(gvDaysToDeadline+2, 5)>2,2,0), 2,If(Mod(gvDaysToDeadline+2, 5)>3,2,0), 1,If(Mod(gvDaysToDeadline+2, 5)>4,2,0) ) ) )
内容的提问来源于stack exchange,提问作者AlHal
相关产品推荐
相关产品推荐

