以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于日期分期 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=11349) |
-- 作者:blackzhu -- 发布时间:2011/7/19 10:47:00 -- 关于日期分期 If Tables("合同").Current("付息方式") ="VIP客户" Then Dim d1 As Date = Tables("合同").Current("计息开始时间") Dim d2 As Date = Tables("合同").Current("计息结束时间") Dim d As Date = d1 Do While d < d2 Dim r As Row = Tables("利息").AddNew() r("客户编号")=Tables("合同").Current("客户编号") r("客户名称")=Tables("合同").Current("客户名称") r("合同编号")=Tables("合同").Current("合同编号") r("本金")=Tables("合同").Current("本金") r("付息方式")=Tables("合同").Current("付息方式") r("方式")=Tables("合同").Current("方式") r("利率")=Tables("合同").Current("利率") r("合同现状")=Tables("合同").Current("合同现状") r("本期起息日") = d d = d.AddMonths(1) If d > d2 Then d = d2 End If r("本期结息日") = d Loop End If 这段代码得过的结果是: 合同表 利息表 计息开始时间 计息结束时间 本期起息日 本期结息日 2011-11-30 2012-06-30 2011-11-30 2011-12-30 2011-12-30 2012-01-30 2012-01-30 2012-02-29 2012-02-29 2012-03-29 2012-03-29 2012-04-29 2012-04-29 2012-05-29 2012-05-29 2012-06-30 如果是碰到闰年(比如说2012就是闰年,那么我要的结果是) 合同表 利息表 计息开始时间 计息结束时间 本期起息日 本期结息日 2011-11-30 2012-06-30 2011-11-30 2011-12-30 2011-12-30 2012-01-30 2012-01-30 2012-02-29 2012-02-29 2012-03-30 2012-03-30 2012-04-30 2012-04-30 2012-05-30 2012-05-30 2012-06-30 请看红色部分的不同. |
-- 作者:狐狸爸爸 -- 发布时间:2011/7/19 11:26:00 -- If Tables("合同").Current("付息方式") ="VIP客户" Then Dim d1 As Date = Tables("合同").Current("计息开始时间") Dim d2 As Date = Tables("合同").Current("计息结束时间") Dim d As Date = d1 Do While d < d2 Dim r As Row = Tables("利息").AddNew() r("客户编号")=Tables("合同").Current("客户编号") r("客户名称")=Tables("合同").Current("客户名称") r("合同编号")=Tables("合同").Current("合同编号") r("本金")=Tables("合同").Current("本金") r("付息方式")=Tables("合同").Current("付息方式") r("方式")=Tables("合同").Current("方式") r("利率")=Tables("合同").Current("利率") r("合同现状")=Tables("合同").Current("合同现状") r("本期起息日") = d If d.Month = 2 AndAlso d.Day = Date.DaysInMonth(d.year,2) d = new Date(d.year,3,31) Else d = d.AddMonths(1) End If If d > d2 Then d = d2 End If r("本期结息日") = d Loop End If |
-- 作者:blackzhu -- 发布时间:2011/7/19 12:07:00 -- 这几个关于日期分期的代码,我得好好收藏.不容易碰到.也得好好学习. |
-- 作者:blackzhu -- 发布时间:2011/7/19 17:35:00 -- 老大得出来的结果有一些问题,可能是我没有说明白;应该是,自然月的日期按照正常的大小月,如果碰到闰年的2月份的写法变动一下. 合同表 利息表 计息开始时间 计息结束时间 本期起息日 本期结息日 2011-11-30 2012-06-30 2011-11-30 2011-12-31 2011-12-31 2012-01-31 2012-01-31 2012-02-29 2012-02-29 2012-03-31 2012-03-31 2012-04-30 2012-04-30 2012-05-31 2012-05-31 2012-06-30
|
-- 作者:blackzhu -- 发布时间:2011/7/20 7:56:00 -- 我做出来了. |
-- 作者:blackzhu -- 发布时间:2011/7/22 8:31:00 -- Dim d1 As Date = Tables("合同").Current("计息开始时间") Dim d2 As Date = Tables("合同").Current("计息结束时间") Dim d As Date = d1 Do While d < d2 Dim r As Row = Tables("利息").AddNew() r("客户编号")=Tables("合同").Current("客户编号") r("客户名称")=Tables("合同").Current("客户名称") r("合同编号")=Tables("合同").Current("合同编号") r("本金")=Tables("合同").Current("本金") r("付息方式")=Tables("合同").Current("付息方式") r("方式")=Tables("合同").Current("方式") r("利率")=Tables("合同").Current("利率") r("合同现状")=Tables("合同").Current("合同现状") r("本期起息日") = d If d.Month = 2 AndAlso d.Day = Date.DaysInMonth(d.year,2) d = new Date(d.year,3,31) Else d=d.Addmonths(1) End If If d > d2 Then d = d2 End If r("本期结息日") = d Dim Days As Integer =Date.DaysInMonth(d.year,d.month) Select Case d.month Case 1, 3, 5, 7, 8, 10, 12 \' AndAlso d.day = 30 d = New Date(d.year,d.month,days) r("本期结息日")=new Date(d.year,d.month,31) End Select Loop 老大帮我看看,当时我用此代码解决了上面的问题,我是用生成的数据,判断本期起息日和本期结息日为大月的时候,日期为31号,一点问题都没有.但又有一个问题产生,如果合同是大月而且是30号开始的,那么怎么能做到如下效果. 现有效果: 合同表 利息表 计息开始时间 计息结束时间 本期起息日 本期结息日 2011-5-30 201-09-30 2011-5-30 2011-06-30 2011-06-30 2011-07-31 2011-07-31 2011-08-31 2011-08-31 2011-09-30 我要的效果: 合同表 利息表 计息开始时间 计息结束时间 本期起息日 本期结息日 2011-5-30 201-09-30 2011-5-30 2011-05-31 2011-05-31 2011-06-30 2011-06-30 2011-07-31 2011-07-31 2011-08-31 2011-08-31 2011-09-30 你看第一二行的效果. 请帮忙! |
-- 作者:狐狸爸爸 -- 发布时间:2011/7/22 8:39:00 -- Dim d1 As Date = Tables("合同").Current("计息开始时间") |
-- 作者:blackzhu -- 发布时间:2011/7/22 9:00:00 -- 老大你的结果是和我的一样的. 2011-5-30
2011-6-30 我要的效果:第一期如是是大月30号开始 2011-05-30 2011-05-31 两天 2011-6-30
2011-7-31 然后是 2011-05-31 2011-06-30 2011-7-31
2011-8-31 2011-8-31
2011-9-30 2011-9-30
2011-10-31 |
-- 作者:狐狸爸爸 -- 发布时间:2011/7/22 9:15:00 -- 我在命令窗口测试我的代码,没有问题的:
Dim d As Date = #5/31/2011#
[此贴子已经被作者于2011-7-22 9:14:55编辑过]
|
-- 作者:blackzhu -- 发布时间:2011/7/22 9:42:00 -- 我知道你的代码没有问题,我的也是没有问题的,你的代码和我的代码出来的效果一摸一样的. 但是我要的效果是,如果大月30号开始的话,利息表的第一行是5-30到5-31 就两天 , 而不是5-30到下月的,也就是6-30.
|