Foxtable(狐表)用户栏目专家坐堂 → 工作日期


  共有3299人关注过本帖树形打印复制链接

主题:工作日期

帅哥哟,离线,有人找我吗?
良才
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:773 积分:6185 威望:0 精华:0 注册:2012/6/11 17:21:00
工作日期  发帖心情 Post By:2017/10/26 16:22:00 [只看该作者]

结束日期 = 开始日期 加上 天数(除去周六、周日)减去法定节假日, 请老师指教,谢谢!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工作日期.zip


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
良才
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:773 积分:6185 威望:0 精华:0 注册:2012/6/11 17:21:00
  发帖心情 Post By:2017/10/30 8:05:00 [只看该作者]

谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
良才
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:773 积分:6185 威望:0 精华:0 注册:2012/6/11 17:21:00
  发帖心情 Post By:2017/10/30 17:06:00 [只看该作者]

老师,好像不对

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工作日期.zip


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
良才
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:773 积分:6185 威望:0 精华:0 注册:2012/6/11 17:21:00
  发帖心情 Post By:2017/10/30 17:29:00 [只看该作者]

谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
良才
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:773 积分:6185 威望:0 精华:0 注册:2012/6/11 17:21:00
  发帖心情 Post By:2017/10/30 22:23:00 [只看该作者]

老师,还想请教,因中国假期特殊性,有时放假前一天是周六或周日,后一天也有可能是周六或周日,我在法定假期表名称列以“上班”来区分,如图:

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20171030221835.png
图片点击可在新窗口打开查看
Select Case e.DataCol.Name
    Case "开始日期","天数"
        Dim dr,drr 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
            Dim cmd As New SQLCommand
            Dim dt As DataTable
            cmd.CommandText = "Select  Sum(天数) As 天数,名称 Fr om {法定假期} WHERE 开始日期 >= #" & dr("开始日期") & "# And 开始日期 <= #" & dr("结束日期") & "# GROUP BY 名称"
            dt = cmd.ExecuteReader()
            drr = dt.Find("名称 = '上班'")
            If drr Is Nothing Then
                dr("结束日期") = dr("开始日期").AddDays(i)
            Else
                dr("结束日期") = dr("开始日期").AddDays(i-dt.DataRows(0)("天数"))
            End If
        End If
End Select

老师怎样?请指教,谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/10/30 23:53:00 [只看该作者]

建议法定假期表直接列出具体的日期,不要使用天数。这样计算就方便多了

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
良才
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:773 积分:6185 威望:0 精华:0 注册:2012/6/11 17:21:00
  发帖心情 Post By:2017/10/31 9:08:00 [只看该作者]

谢谢

 回到顶部
总数 15 1 2 下一页