以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  关于日期分期  (http://www.foxtable.com/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("计息开始时间")
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


--  作者: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#
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编辑过]

--  作者:blackzhu
--  发布时间:2011/7/22 9:42:00
--  
我知道你的代码没有问题,我的也是没有问题的,你的代码和我的代码出来的效果一摸一样的.
但是我要的效果是,如果大月30号开始的话,利息表的第一行是5-30到5-31  就两天 , 而不是5-30到下月的,也就是6-30.