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
请看红色部分的不同.
这几个关于日期分期的代码,我得好好收藏.不容易碰到.也得好好学习.
老大得出来的结果有一些问题,可能是我没有说明白;应该是,自然月的日期按照正常的大小月,如果碰到闰年的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
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
你看第一二行的效果.
请帮忙!
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
Dim d1 As Date = d
d= d.Addmonth(1)
If d1.day = Date.DaysInMonth(d1.year,d1.month) Then
d = new Date(d.year,d.month,Date.DaysInMonth(d.year,d.month))
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
老大你的结果是和我的一样的.
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
我在命令窗口测试我的代码,没有问题的:
Dim d As Date = #5/31/2011#
Dim d2 As Date = #5/1/2012#
Do While d < d2
Dim d1 As Date = d
d= d.Addmonths(1)
If d1.day = Date.DaysInMonth(d1.year,d1.month) Then
d = new Date(d.year,d.month,Date.DaysInMonth(d.year,d.month))
End If
output.show(d)
Loop
[此贴子已经被作者于2011-7-22 9:14:55编辑过]
我知道你的代码没有问题,我的也是没有问题的,你的代码和我的代码出来的效果一摸一样的.
但是我要的效果是,如果大月30号开始的话,利息表的第一行是5-30到5-31 就两天 , 而不是5-30到下月的,也就是6-30.