年龄和工龄的精确计算

方法一

假定表中有两列,分别是入职日期和工龄,需要根据入职日期精确计算出工龄。

可以如下设置DataColChanged事件:

Select Case e.DataCol.name
    Case "入职日期"
        If e.DataRow.IsNull("入职日期") Then
            e.DataRow("工龄") = Nothing
        Else
            Dim tp As TimeSpan = Date.today - CDate(e.DataRow("入职日期"))
            e.DataRow("工龄") = Math.Round(tp.TotalDays / 365.2422,2)
        End
If

End
Select

年龄也可以用同样的方法计算。

提示: 一年的平均天数是365.2422天。

方法二

如果要准确计算出工龄的年月日,例如:

可以考虑使用DateYMD函数,如下设置DataColChanged事件代码:

Select Case e.DataCol.name
    Case "入职日期"
        If e.DataRow.IsNull("入职日期") Then
            e.DataRow("工龄_年") = Nothing
            e.DataRow("工龄_月") = Nothing
            e.DataRow("工龄_日") = Nothing
        Else
            Dim y,m,d As Integer
            DateYMD(e.DataRow("入职日期"),Date.Today,y,m,d)
            e.DataRow("工龄_年") = y
            e.DataRow("工龄_月") = m
            e.DataRow("工龄_日") = d
        End If

End
Select

最后,为了每次打开项目后,都能得到最新的工龄数据,可以在AfterOpenProject事件中,设置下面的代码:

DataTables("员工").DataCols("入职日期").RaiseDataColChanged()


本页地址:http://www.foxtable.com/webhelp/topics/2647.htm