2016-11-06 9 views
0

最近アクセスしましたが、特定の数式を吸っています。 私は従業員の雇用日と今日の場所の特定の日付から年数を計算する方法を見つけようとしてきました。 私は検索していくつかのDatediffとDATEDIFを試してみました。どんな助けでも大歓迎です。アクセス2016数式

答えて

0

これは簡単ではなく、正確にうるう年を考慮に入れたい場合はトラップがあるからです。

トリックは、常にこの機能にようDateAdd関数を使用することです:

Public Function Years(_ 
    ByVal datDate1 As Date, _ 
    ByVal datDate2 As Date, _ 
    Optional ByVal booLinear As Boolean) _ 
    As Integer 

' Returns the difference in full years between datDate1 and datDate2. 
' 
' Calculates correctly for: 
' negative differences 
' leap years 
' dates of 29. February 
' date/time values with embedded time values 
' negative date/time values (prior to 1899-12-29) 
' 
' Optionally returns negative counts rounded down to provide a 
' linear sequence of year counts. 
' For a given datDate1, if datDate2 is decreased step wise one year from 
' returning a positive count to returning a negative count, one or two 
' occurrences of count zero will be returned. 
' If booLinear is False, the sequence will be: 
' 3, 2, 1, 0, 0, -1, -2 
' If booLinear is True, the sequence will be: 
' 3, 2, 1, 0, -1, -2, -3 
' 
' If booLinear is False, reversing datDate1 and datDate2 will return 
' results of same absolute Value, only the sign will change. 
' This behaviour mimics that of Fix(). 
' If booLinear is True, reversing datDate1 and datDate2 will return 
' results where the negative count is offset by -1. 
' This behaviour mimics that of Int(). 

' DateAdd() is used for check for month end of February as it correctly 
' returns Feb. 28. when adding a count of years to dates of Feb. 29. 
' when the resulting year is a common year. 
' 
' 2007-06-22. Gustav Brock, Cactus Data, CPH. 

    Dim intDiff As Integer 
    Dim intSign As Integer 
    Dim intYears As Integer 

    ' Find difference in calendar years. 
    intYears = DateDiff("yyyy", datDate1, datDate2) 
    ' For positive resp. negative intervals, check if the second date 
    ' falls before, on, or after the crossing date for a full 12 months period 
    ' while at the same time correcting for February 29. of leap years. 
    If DateDiff("d", datDate1, datDate2) > 0 Then 
    intSign = Sgn(DateDiff("d", DateAdd("yyyy", intYears, datDate1), datDate2)) 
    intDiff = Abs(intSign < 0) 
    Else 
    intSign = Sgn(DateDiff("d", DateAdd("yyyy", -intYears, datDate2), datDate1)) 
    If intSign <> 0 Then 
     ' Offset negative count of years to continuous sequence if requested. 
     intDiff = Abs(booLinear) 
    End If 
    intDiff = intDiff - Abs(intSign < 0) 
    End If 

    ' Return count of years as count of full 12 months periods. 
    Years = intYears - intDiff 

End Function 

一般的な使用方法:

HiredYears = Years([HireDate], #12/31/2017#) 

注、その月の1日に雇わ誰かのために、完全なその月の次の1日に雇用年数がカウントされるため、表現はむしろ次のようになります。

HiredYears = Years([HireDate], #1/1/2018#) 
+0

ご協力いただきありがとうございます。私はdatediff( "yyyy"、[Hiredate]、12/312017)を試しましたが、負の3桁の数字を取得します。私はそれを回して正の数を得るが、それでも3桁の数字を得る。私は雇用日と今日の日付である2031年12月31日の間の時間を年月で見つけなければなりません。 –

+0

_12/312017_は有効な日付ではありません。それで仕事ができない時、なぜあなたは_DateDiff_で走りますか?だから私はその機能を投稿した。使用方法については編集を参照してください。 – Gustav

関連する問題