Foxtable(狐表)用户栏目专家坐堂 → 关于日期分期


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

主题:关于日期分期

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
关于日期分期  发帖心情 Post By: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

 请看红色部分的不同.


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/7/19 12:07:00 [只看该作者]

这几个关于日期分期的代码,我得好好收藏.不容易碰到.也得好好学习.

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By: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
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/7/20 7:56:00 [只看该作者]

我做出来了.

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By: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

你看第一二行的效果.

请帮忙!
                                                           

                                                              

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By: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 

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  10楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/7/22 9:42:00 [只看该作者]

我知道你的代码没有问题,我的也是没有问题的,你的代码和我的代码出来的效果一摸一样的.
但是我要的效果是,如果大月30号开始的话,利息表的第一行是5-30到5-31  就两天 , 而不是5-30到下月的,也就是6-30.

 回到顶部
总数 17 1 2 下一页