VBA, MS Access MS Access в примерах

Расчёт кол-ва дней до следующего дня рождения

Public Function DaysToBirthDay(vBirthDay As Variant, Optional iMaxDaysLimit% = 365) As Integer
'es 19.04.2018 LE 26.11.2023- v003
'Расчёт кол-ва дней до следующего Дня Рождения персонажа по Дате Рождения
' ... на текущую  дату, при ошибках возвращает -1 (минус один)
' -------------------------------------------------------------------------------------------------/
'Аргументы :
'   vBirthDay      = Дата рождения - если не указана - Функция возвращает: -1
'   iMaxDaysLimit  = Ограничитель показа (за сколько дней до ДР показывать)
'                    - если кол-во оставшихся дней меньше аргумента - Функция возвращает: 0
' -------------------------------------------------------------------------------------------------/
'Примеры эксплуатации:
'   ?DaysToBirthDay(#30/04/1988#, 30)
'   =DaysToBirthDay([ДатаРождения])
' -------------------------------------------------------------------------------------------------/
Dim iThisYear As Integer, iMonth As Integer, iDay As Integer
Dim dDateOfNextBD As Date ' Дата (следующего) дня рождения в текущем (или следуещем ) году
On Error GoTo DaysToBirthDay_Err
    
    iThisYear = Year(Date)
    iMonth = Month(vBirthDay)
    iDay = Day(vBirthDay)
    
    dDateOfNextBD = DateSerial(iThisYear, iMonth, iDay)         ' Дата ДР в этом году
    
    If dDateOfNextBD < Date Then                                ' В этом году ДР уже был ...
        dDateOfNextBD = DateSerial(iThisYear + 1, iMonth, iDay) ' Дата ДР в следующем году
    End If


    iDay = DateDiff("d", Date, dDateOfNextBD)                   ' Кол-во дней до следующего ДР
    
' Учёт аргумента iMaxDaysLimit (опционально):
    If iDay <= iMaxDaysLimit Then DaysToBirthDay = iDay

' -------------------------------------------------------------------------------------------------/
    Exit Function

DaysToBirthDay_Err:
    Err.Clear: DaysToBirthDay = -1
End Function

Назад ToTop
L.E. 26.11.2023
Рейтинг@Mail.ru