以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 工作日期 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=108654) |
||||
-- 作者:良才 -- 发布时间:2017/10/26 16:22:00 -- 工作日期 结束日期 = 开始日期 加上 天数(除去周六、周日)减去法定节假日, 请老师指教,谢谢!
|
||||
-- 作者:有点甜 -- 发布时间:2017/10/26 17:15:00 -- Select Case e.DataCol.Name Case "开始日期","天数" Dim dr As DataRow dr = e.DataRow If dr.IsNull("开始日期") OrElse dr.IsNull("天数") Then dr("结束日期") = Nothing Else Dim c As Integer = 0 Dim d As Date Dim i As Integer = 0 Dim drs = DataTables("法定假期").Select("") Do While True d = dr("开始日期").AddDays(i) If d.DayOfWeek >= 1 AndAlso d.DayOfWeek <= 5 Then c += 1 For Each cdr As DataRow In drs Dim sd As Date = cdr("开始日期") If sd <= d AndAlso sd.AddDays(cdr("天数")) >= d Then c -= 1 Exit For End If Next End If i += 1 If c = dr("天数") Then Exit Do End If Loop dr("结束日期") = dr("开始日期").AddDays(i) End If End Select |
||||
-- 作者:良才 -- 发布时间:2017/10/30 8:05:00 -- 谢谢 |
||||
-- 作者:良才 -- 发布时间:2017/10/30 17:06:00 -- 老师,好像不对
|
||||
-- 作者:有点甜 -- 发布时间:2017/10/30 17:12:00 -- Select Case e.DataCol.Name Case "开始日期","天数" Dim dr As DataRow dr = e.DataRow If dr.IsNull("开始日期") OrElse dr.IsNull("天数") Then dr("结束日期") = Nothing Else Dim c As Integer = 0 Dim d As Date Dim i As Integer = 0 Dim drs = DataTables("法定假期").Select("") Do While True d = dr("开始日期").AddDays(i) If d.DayOfWeek >= 1 AndAlso d.DayOfWeek <= 5 Then c += 1 For Each cdr As DataRow In drs Dim sd As Date = cdr("开始日期") If sd <= d AndAlso sd.AddDays(cdr("天数")) >= d Then c -= 1 Exit For End If Next End If If c = dr("天数") Then Exit Do End If i += 1 Loop dr("结束日期") = dr("开始日期").AddDays(i) End If End Select |
||||
-- 作者:良才 -- 发布时间:2017/10/30 17:29:00 -- 谢谢 |
||||
-- 作者:良才 -- 发布时间:2017/10/30 22:23:00 -- 老师,还想请教,因中国假期特殊性,有时放假前一天是周六或周日,后一天也有可能是周六或周日,我在法定假期表名称列以“上班”来区分,如图:
老师怎样?请指教,谢谢! |
||||
-- 作者:有点蓝 -- 发布时间:2017/10/30 23:53:00 -- 建议法定假期表直接列出具体的日期,不要使用天数。这样计算就方便多了 |
||||
-- 作者:有点蓝 -- 发布时间:2017/10/31 8:46:00 -- Select Case e.DataCol.Name Case "开始日期","天数" Dim dr As DataRow dr = e.DataRow If dr.IsNull("开始日期") OrElse dr.IsNull("天数") Then dr("结束日期") = Nothing Else Dim c As Integer = 0 Dim d As Date Dim i As Integer = 1 Dim drs = DataTables("法定假期").Select("") Dim lst1 As new List(of Date) Dim lst2 As new List(of Date) For Each cdr As DataRow In drs If cdr("名称") = "上班" Then For m As Integer = 1 To cdr("天数") lst2.Add(cdr("开始日期").AddDays(m-1)) Next Else For m As Integer = 1 To cdr("天数") lst1.Add(cdr("开始日期").AddDays(m-1)) Next End If Next Dim tshu As Integer = dr("天数") d = dr("开始日期") Do While i < tshu d = d.AddDays(1) If d.DayOfWeek = 0 OrElse d.DayOfWeek = 6 Then If lst2.Contains(d) Then i = i + 1 End If Else If lst1.Contains(d) = False Then i = i + 1 End If End If Loop dr("结束日期") = d End If End Select
|
||||
-- 作者:良才 -- 发布时间:2017/10/31 9:08:00 -- 谢谢 |