Foxtable(狐表)用户栏目专家坐堂 → 再次求教关于时间分段的问题 我已经参考了文件,还是没有解决


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

主题:再次求教关于时间分段的问题 我已经参考了文件,还是没有解决

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


加好友 发短信
等级:幼狐 帖子:116 积分:998 威望:0 精华:0 注册:2012/10/11 11:11:00
再次求教关于时间分段的问题 我已经参考了文件,还是没有解决  发帖心情 Post By:2016/12/2 8:52: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上半年的列中,以此类推 需要怎么做呢,求大神指点

 

这个时间跨度 

 

 

 

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


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


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

求大神帮忙修改一下

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


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

有点色大神 我说的是这个帖子 求您帮着弄下,真心感谢您不厌其烦的帮助,

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


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

没有基础,给你再多的代码。业务如果有点变化,你也一样用不了。

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



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


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

额。。。我知道 实在非常抱歉,占用您很多时间  再次非常感谢  我在努力学习中

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


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

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

 

有点蓝工程师,额。。。我真的不是故意的 不关表B的事情,我那个表B 只是用来做测试得,全部代码都是表A的,您做的这个代码是在表B中生成了天数,我需要的是,在表A当中计算开始时间,和 结束时间的是天数 然后填写在表A 的列中

 


 


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20161202104059.png
图片点击可在新窗口打开查看

 

例如 表A中列 开始时间 和 结束时间列 分别为2016.5.1 和  2017.8.1  那么首先应该先分时间段 为2016.5.1-2016.6.30计算出这个时间段是多少天,然后填写在表A中2016年上半年的列中,然后在分2016.7.1-2016.12.31这个时间段的天数 填写在表A 中2016年下半年的列中,然后计算出2017.1.1-2017.6.30 这个时间段的天数 然后填写在表A中2017年上半年的列中,这样的。。。。。真心不是故意的


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


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

跟表B 根本就没有关系。。。

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


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

跟表B 没有关系 啊  大哥

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


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

从程序的角度来说,日期范围不是固定的,假如跨度有10年,你要动态增加不少列。不好处理,建议使用明细表,就是表B。

坚持你那种方式的话,只能自己做了,我们处理不来。

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


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

datacolchanged事件

 

Select Case e.DataCol.Name
    Case "日期起止"
        Dim str As String = e.DataRow("日期起止")
        Dim arr() As String = str.Split("-")
        Dim d As Date = CDate(arr(0).Replace(".","-"))
        e.DataRow("开始时间") = d
        d = CDate(arr(1).Replace(".","-"))
        e.DataRow("结束时间")=d
    Case "开始时间","结束时间"
        If e.DataRow.IsNull("开始时间") = False AndAlso e.DataRow.IsNull("结束时间") = False
            Dim dta As DataTable = e.DataTable
            Dim dr = e.DataRow
            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
        End If
End Select


 回到顶部