Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共11 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:日期计算

1楼
老有所乐 发表于:2010/11/30 7:20:00

求表A“日期AB列相隔时间”列代码,即日期A与日期B两列相隔时间的代码。

谢谢!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

2楼
狐狸爸爸 发表于:2010/11/30 8:07:00

DataColChanged事件:

 

Select Case e.DataCol.Name
    Case "日期A","日期B"
        If e.DataRow.IsNull("日期A") OrElse e.DataRow.IsNull("日期B") Then
            e.DataRow("日期AB列相隔时间") = Nothing
        Else
            Dim y,m,d As Integer
            Dim d1 As Date = e.DataRow("日期A")
            Dim d2 As Date = e.DataRow("日期B")
            y = d2.Year - d1.Year
            m = d2.Month - d1.Month
            d = d2.day - d1.day
            If m = 0 OrElse (m = 0 AndAlso d < 0) Then
                y = y - 1
                m = m + 12
            End If
            If d < 0 Then
                m = m - 1
                d = Date.DaysInMonth(d1.Year,d1.Month) + d
            End If
            Dim s As String
            If y > 0 Then
                s = y & "年"
            End If
            If m > 0 Then
                s = s & m & "个月"
            End If
            If d > 0 Then
                s = s & d & "日"
            End If
            e.DataRow("日期AB列相隔时间") = s      
        End If
End Select

[此贴子已经被作者于2010-11-30 9:10:10编辑过]
3楼
老有所乐 发表于:2010/11/30 11:17:00

谢谢贺老师!

还有一个问题,如果两日期列为同年同月 显示的就为12个月  如    日期A 为2010-11-28  日期B  为2010-11-30  结果成了12个月2日.正确结果应该是 2日,这不知道是哪里的问题。

[此贴子已经被作者于2010-11-30 11:19:20编辑过]
4楼
狐狸爸爸 发表于:2010/11/30 11:28:00

是我手误,将<打成=了,正确的:

 

Select Case e.DataCol.Name
    Case "日期A","日期B"
        If e.DataRow.IsNull("日期A") OrElse e.DataRow.IsNull("日期B") Then
            e.DataRow("日期AB列相隔时间") = Nothing
        Else
            Dim y,m,d As Integer
            Dim d1 As Date = e.DataRow("日期A")
            Dim d2 As Date = e.DataRow("日期B")
            y = d2.Year - d1.Year
            m = d2.Month - d1.Month
            d = d2.day - d1.day
            If m < 0 OrElse (m = 0 AndAlso d < 0) Then
                y = y - 1
                m = m + 12
            End If
            If d < 0 Then
                m = m - 1
                d = Date.DaysInMonth(d1.Year,d1.Month) + d
            End If
            Dim s As String
            If y > 0 Then
                s = y & "年"
            End If
            If m > 0 Then
                s = s & m & "个月"
            End If
            If d > 0 Then
                s = s & d & "日"
            End If
            e.DataRow("日期AB列相隔时间") = s      
        End If
End Select

5楼
老有所乐 发表于:2010/11/30 11:54:00

谢谢!这个就完全正确。

 

6楼
lihe60 发表于:2010/11/30 12:30:00

能不能增加本年第一天、上月最后一天、本月第一天、本月最后一天、本年最后一天的函数。

7楼
mr725 发表于:2010/11/30 13:03:00
以下是引用lihe60在2010-11-30 12:30:00的发言:

能不能增加本年第一天、上月最后一天、本月第一天、本月最后一天、本年最后一天的函数。

近似的帮助中可以找到啊~  DaysInMonth

[此贴子已经被作者于2010-11-30 13:03:42编辑过]
8楼
czy 发表于:2010/11/30 13:09:00

好像没什么必要,太简单了,自己写一下也无妨。

 

Dim d As Date = Date.Today
Output.Show("本年第一天:" & New Date(d.Year,1,1))
Output.Show("本年最后一天:" & New Date(d.Year,12,Date.DaysInMonth(d.Year,1)))
Output.Show("本月第一天:" & New Date(d.Year,d.Month,1))
Output.Show("本月最后一天:" & New Date(d.Year,12,Date.DaysInMonth(d.Year,d.Month)))

9楼
czy 发表于:2010/11/30 17:29:00
老六,要能给时段型数据加上Years和Months属性就好了,这样我们就无需这么去折腾了。
10楼
狐狸爸爸 发表于:2010/11/30 17:46:00
呵呵,这怎么加啊,一个月按多少天算呢?
共11 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03516 s, 3 queries.