Foxtable(狐表)用户栏目专家坐堂 → 关于分段时间


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

主题:关于分段时间

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


加好友 发短信
等级:幼狐 帖子:116 积分:998 威望:0 精华:0 注册:2012/10/11 11:11:00
关于分段时间  发帖心情 Post By:2016/12/2 8:14:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.rar

 

表A中有开始时间  和 结束时间  和年份半年的分段列

我想把以 开始时间 和 结束时间为时间长度,以 每年6月30日 为半年的基数 做成时间分段 转换成天数 分别填入对应的时间分段列

 

例如 表A中第一行数据 开始和结束时间分别为2015.10.15 和2016.6.30  那么他对应的分段就应该为 (2015.10.15-2015.12.31=77天,这个天数填写在【2015年下半年】的列中)  2016.1.1-2016.6.30=180天  这个天数填写在2016上半年的列中,以此类推 需要怎么做呢,求大神指点

 

这个时间跨度


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


加好友 发短信
等级:幼狐 帖子:116 积分:998 威望:0 精华:0 注册:2012/10/11 11:11:00
  发帖心情 Post By:2016/12/2 8:44:00 [只看该作者]

求技术大大 帮个忙 谢谢 拜服

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


加好友 发短信
等级:超级版主 帖子:110597 积分:562881 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/12/2 8:46:00 [只看该作者]

参考这个:http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=93565

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


加好友 发短信
等级:幼狐 帖子:116 积分:998 威望:0 精华:0 注册:2012/10/11 11:11:00
  发帖心情 Post By:2016/12/2 8:51:00 [只看该作者]

有点蓝大神 ,我参考了之前发的那个帖子,之前那个用的是OUTSHOW函数 当我赋值到列的时候就不行了,希望您能在我的附件中帮忙写下代码可以吗 再次谢谢您

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/12/2 9:48:00 [只看该作者]

参考下面的代码改一下

 

Dim dta As DataTable = DataTables("表A")
For Each dr As DataRow In dta.Select("开始时间 is not null and 结束时间 is not null")
    For Each dc As DataCol In dta.DataCols
        If dc.Name.StartsWith("A") OrElse dc.Name.StartsWith("B") Then
            dr(dc.name) = Nothing
        End If
    Next
    Dim tempd1 As Date
    Dim tempd2 As Date
    Dim d_start As Date = dr("开始时间")
    Dim d_end As Date = dr("结束时间")
    Dim d_m1 As Date = new Date(d_start.Year, 6, 30)
    Dim d_e1 As Date = new Date(d_start.Year, 12, 31)
    Dim idx As Integer = 0
    If d_start <= d_m1 Then
        tempd1 = d_start
        If d_end <= d_m1 Then
            tempd2 = d_end
        Else
            tempd2 = d_m1
            idx = 1
        End If
    Else
        tempd1 = d_start
        If d_end <= d_e1
            tempd2 = d_end
        Else
            tempd2 = d_e1
            idx = 2
        End If
    End If
    Dim sp As TimeSpan = tempd2 - tempd1
    If tempd2 > new Date(tempd2.Year, 6, 30) Then
        dr("B" & tempd2.Year) = sp.TotalDays
    Else
        dr("A" & tempd2.Year) = sp.TotalDays
    End If
    If idx > 0 Then
        Dim d As Date = tempd2
        Do While d < d_end
            tempd1 = d.AddDays(1)
            Dim d2 As Date = iif(idx Mod 2 = 0, d.AddMonths(6), d.AddMonths(6).AddDays(1))
            If d2 >= d_end Then
                tempd2 = d_end
            Else
                tempd2 = d2
            End If
            sp = tempd2 - tempd1
            If tempd2 > new Date(tempd2.Year, 6, 30) Then
                dr("B" & tempd2.Year) = sp.TotalDays
            Else
                dr("A" & tempd2.Year) = sp.TotalDays
            End If
            idx += 1
            d = d2
        Loop
    End If
Next

[此贴子已经被作者于2016/12/2 11:39:04编辑过]

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


加好友 发短信
等级:婴狐 帖子:46 积分:355 威望:0 精华:0 注册:2015/9/21 20:43:00
  发帖心情 Post By:2016/12/2 9:59:00 [只看该作者]

以下是引用有点色在2016/12/2 9:48:00的发言:

参考下面的代码改一下

 

Dim dta As DataTable = DataTables("表A")
For Each dr As DataRow In dta.Select("开始时间 is not null and 结束时间 is not null")
    For Each dc As DataCol In dta.DataCols
        If dc.Name.StartsWith("A") OrElse dc.Name.StartsWith("B") Then
            dr(dc.name) = Nothing
        End If
    Next
    Dim tempd1 As Date
    Dim tempd2 As Date
    Dim d_start As Date = dr("开始时间")
    Dim d_end As Date = dr("结束时间")
    Dim d_m1 As Date = new Date(d_start.Year, 6, 30)
    Dim d_e1 As Date = new Date(d_start.Year, 12, 31)
    Dim d_m2 As Date = new Date(d_end.Year, 6, 30)
    Dim d_e2 As Date = new Date(d_end.Year, 12, 31)
    Dim idx As Integer = 0
    If d_start <= d_m1 Then
        tempd1 = d_start
        If d_end <= d_m1 Then
            tempd2 = d_end
        Else
            tempd2 = d_m1
            idx = 1
        End If
    Else
        tempd1 = d_start
        If d_end <= d_e1
            tempd2 = d_end
        Else
            tempd2 = d_e1
            idx = 2
        End If
    End If
    Dim sp As TimeSpan = tempd2 - tempd1
    If tempd2 > new Date(tempd2.Year, 6, 30) Then
        dr("B" & tempd2.Year) = sp.TotalDays
    Else
        dr("A" & tempd2.Year) = sp.TotalDays
    End If
    If idx > 0 Then
        Dim d As Date = tempd2
        Do While d < d_end
            tempd1 = d.AddDays(1)
            Dim d1 As Date = iif(idx Mod 2 = 0, d_m2, d_e2)
            Dim d2 As Date = iif(idx Mod 2 = 0, d.AddMonths(6), d.AddMonths(6).AddDays(1))
            If d2 >= d1 Then
                tempd2 = d1
            Else
                tempd2 = d2
            End If
            sp = tempd2 - tempd1
            If tempd2 > new Date(tempd2.Year, 6, 30) Then
                dr("B" & tempd2.Year) = sp.TotalDays
            Else
                dr("A" & tempd2.Year) = sp.TotalDays
            End If
            idx += 1
            d = d2
        Loop
    End If
Next

有点色大神 请挪步 名称为 再次求教关于时间分段问题 ,那个帖子,我再那个帖子的附件中更改了列 这个帖子作废了,之前的技术员他请事假一个月,我一个做财务的基本不会,原来的软件打不开了,所以我自己做了个表 就是想计算几个数据,求您帮我弄下,不是当您是免费的代码编译器。。。再次感谢 有点色 工程师,求您帮个忙哈



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


加好友 发短信
等级:婴狐 帖子:46 积分:355 威望:0 精华:0 注册:2015/9/21 20:43:00
  发帖心情 Post By:2016/12/2 10:12:00 [只看该作者]

这段代码放入事件当中 一执行 直接就关闭了

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


加好友 发短信
等级:婴狐 帖子:46 积分:355 威望:0 精华:0 注册:2015/9/21 20:43:00
  发帖心情 Post By:2016/12/2 10:13:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目1.rar

您看 这段代码放进去 一执行 直接就关闭了

 

表A中有开始时间  和 结束时间  和年份半年的分段列

我想把以 开始时间 和 结束时间为时间长度,以 每年6月30日 为半年的基数 做成时间分段 转换成天数 分别填入对应的时间分段列

 

例如 表A中第一行数据 开始和结束时间分别为2015.10.15 和2016.6.30  那么他对应的分段就应该为 (2015.10.15-2015.12.31=77天,这个天数填写在【2015年下半年】的列中)  2016.1.1-2016.6.30=180天  这个天数填写在2016上半年的列中,以此类推 需要怎么做呢,求大神指点

 

这个时间跨度 

[此贴子已经被作者于2016/12/2 10:13:26编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/12/2 11:26:00 [只看该作者]

 单独做个按钮,执行5楼的代码,而不是放在DataColChanged事件里。

 回到顶部