以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 关于分段时间 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=93594)
|
-- 作者:litiemiao
-- 发布时间:2016/12/2 8:14:00
-- 关于分段时间
表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
-- 发布时间:2016/12/2 8:44:00
--
求技术大大 帮个忙 谢谢 拜服
|
-- 作者:有点蓝
-- 发布时间:2016/12/2 8:46:00
--
参考这个:http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=93565
|
-- 作者:litiemiao
-- 发布时间:2016/12/2 8:51:00
--
有点蓝大神 ,我参考了之前发的那个帖子,之前那个用的是OUTSHOW函数 当我赋值到列的时候就不行了,希望您能在我的附件中帮忙写下代码可以吗 再次谢谢您
|
-- 作者:有点色
-- 发布时间: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
-- 发布时间: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
-- 发布时间:2016/12/2 10:12:00
--
这段代码放入事件当中 一执行 直接就关闭了
|
-- 作者:litiemiao2016
-- 发布时间:2016/12/2 10:13:00
--
您看 这段代码放进去 一执行 直接就关闭了
表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编辑过]
|
-- 作者:有点色
-- 发布时间:2016/12/2 11:26:00
--
单独做个按钮,执行5楼的代码,而不是放在DataColChanged事件里。
|