Office中国论坛/Access中国论坛

标题: 求助日期计算器代码 [打印本页]

作者: boy1    时间: 2009-1-16 09:53
标题: 求助日期计算器代码
求助日期计算器代码
作者: Henry D. Sy    时间: 2009-1-16 09:58
每个月按30天计算可以吗
作者: boy1    时间: 2009-1-16 10:24
标题: 每个月按实际当月天数计算
每个月按实际当月天数计算,比如2009.01.31----2009.02.31应为一个月,但实际应该到2009.02.28为一个月才对。

上图正确的时间为总天数42天;月数1;零天数14天;

[ 本帖最后由 boy1 于 2009-1-16 10:27 编辑 ]
作者: boy1    时间: 2009-1-16 10:30
标题: 自己顶一下。版主费心了
自己顶一下。版主费心了[:32]
作者: Henry D. Sy    时间: 2009-1-16 10:37
1日到2日算一天或是两天?
作者: boy1    时间: 2009-1-16 11:15
标题: 算两天。
原帖由 Henry D. Sy 于 2009-1-16 10:37 发表
1日到2日算一天或是两天?



算两天,版主费心。
作者: Henry D. Sy    时间: 2009-1-16 11:19
有点麻烦,得逐月判断是几天。
我来想想有没有什么捷径
作者: layaman_999    时间: 2009-1-16 13:29
请仔细查看关于Format函数,那里有你想要的答案
作者: todaynew    时间: 2009-1-16 14:02
原帖由 Henry D. Sy 于 2009-1-16 11:19 发表
有点麻烦,得逐月判断是几天。
我来想想有没有什么捷径


给版主一个思路:
3.31-1.31=x(2个月,共?天)
3.31-3.13=y
3.13-1.31=x-y=42天
后面的问题版主同志就知道怎么解决了。

由此想到了一个小学的奥赛题,说是兄弟三人分遗产,各得1/2、1/3、1/8,遗产为23匹马,你怎么分?呵呵

[ 本帖最后由 todaynew 于 2009-1-16 14:08 编辑 ]
作者: boy1    时间: 2009-1-16 14:02
标题: 已搞定
已搞定[:50] 谢谢各位
If Not IsNull(Me.时间开始) And Not IsNull(Me.时间截止) Then
    str1 = DateDiff("m", Me.时间开始, Me.时间截止) - IIf(Day(Me.时间开始) - Day(Me.时间截止) >= 0, 1, 0)
  End If
If Not IsNull(Me.时间开始) And Not IsNull(Me.时间截止) Then
    str2 = DateDiff("d", DateAdd("m", DateDiff("m", Me.时间开始, Me.时间截止) - IIf((Day(Me.时间开始) - Day(Me.时间截止)) >= 0, 1, 0), Me.时间开始), Me.时间截止) + 1
End If
Me.月个数 = str1
Me.零天数 = str2

[ 本帖最后由 boy1 于 2009-1-18 22:02 编辑 ]
作者: todaynew    时间: 2009-1-16 14:09
原帖由 boy1 于 2009-1-16 14:02 发表
已搞定[:50] 谢谢各位
If Not IsNull(Me.时间开始) And Not IsNull(Me.时间截止) Then
    str1 = DateDiff("m", Me.时间开始, Me.时间截止) - IIf(Day(Me.时间开始) - Day(Me.时间截止) >= 0, 1, 0)
  End If
I ...


好复杂的算式,呵呵。
作者: wang_93    时间: 2009-1-16 14:30
我也遇到这个问题谢谢版主分享
作者: Henry D. Sy    时间: 2009-1-16 20:08
由此想到了一个小学的奥赛题,说是兄弟三人分遗产,各得1/2、1/3、1/8,遗产为23匹马,你怎么分?呵呵
分别分得 12,8,3
作者: Henry D. Sy    时间: 2009-1-17 07:13
10楼的还不是很理想,举个例子
如果08-06-01-------08-07-01,按10楼的代码,会得到31天,当然就天数来说并没有错。
但是您的要求应该是显示1个月零1天吧。
作者: boy1    时间: 2009-1-17 19:22
原帖由 Henry D. Sy 于 2009-1-17 07:13 发表
10楼的还不是很理想,举个例子
如果08-06-01-------08-07-01,按10楼的代码,会得到31天,当然就天数来说并没有错。
但是您的要求应该是显示1个月零1天吧。


版主就是版主,果然火眼金睛。是有这个不足。求更好的办法。[:50]
作者: Henry D. Sy    时间: 2009-1-20 07:33
晕,把这贴搞忘了
作者: Henry D. Sy    时间: 2009-1-20 07:34
没测试,您自己测试一下看看。

Private Sub Command248_Click()
    Dim strTemp As String
    strTemp = getMD(Me.时间开始, Me.时间截止)
    Me.月个数 = Val(strTemp)
    Me.零天数 = Mid(strTemp, InStr(strTemp, "@") + 1)
End Sub

Function getMD(sDate As Date, eDate As Date) As String
    Dim Ms As Integer, Ds As Integer
    Dim sD As Integer, eD As Integer

    sD = Day(sDate)
    eD = Day(eDate)
    Ds = eD - sD
    Ms = DateDiff("m", sDate, eDate)
    If Ds < -1 Then
        Ms = Ms - 1
        Ds = DateDiff("d", DateAdd("m", Ms, sDate), eDate)
    End If
    getMD = Ms & "@" & Ds + 1
End Function
作者: boy1    时间: 2009-1-20 13:03
标题: 先谢谢版主
先谢谢版主
作者: 7777777    时间: 2009-2-5 10:15
ddddddddd
作者: zx994398    时间: 2012-3-20 12:32
碰到2月份的时候有点误差。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3