Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Разница в годах между датами  [new]
Vlad F
Member

Откуда:
Сообщений: 1450
Приветствую!
Скажите почему DateDiff("YYYY", "07.11.2018", "06.10.2021", 2) выдает 3, и как исправить, чтобы возвращалось полных лет?

Сообщение было отредактировано: 6 окт 21, 17:56
6 окт 21, 18:03    [22380199]     Ответить | Цитировать Сообщить модератору
 Re: Разница в годах между датами  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5361
Vlad F
DateDiff("d, "07.11.2018", "06.10.2021")\365.25
6 окт 21, 19:03    [22380231]     Ответить | Цитировать Сообщить модератору
 Re: Разница в годах между датами  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
Vlad F,
?DateDiff("YYYY", #12/31/20#, #1/1/21#)
 1 
читайте справку про функцию-тупо от 21 отнимается 20
Если хотите полные года-сочиняйте сами
А там проблема-сколько февралей по 28 или 29 дней попадает в интервал. В принципе, все решаемо,только несколько громоздко-одной строкой кода,уж точно, не обойдетесь

Сообщение было отредактировано: 6 окт 21, 20:24
6 окт 21, 20:32    [22380265]     Ответить | Цитировать Сообщить модератору
 Re: Разница в годах между датами  [new]
Eugene-LS
Member

Откуда: РФ
Сообщений: 63
Vlad F
чтобы возвращалось полных лет?

Простенько и с учетом "високосности", лучшим приближением будет делить на 365.25
- астрономы говорят, что точнее 365,2475.
Возраст: Round((DATE()-[ДАТА_Рождения])/365,25; 1)

Или без дробной части:
Возраст: Fix((DATE()-[ДАТА_Рождения])/365,25)

Или:
=DateDiff("yyyy";BDate;DATE())+(Format(DATE(;"mmdd")<Format(BDate,"mmdd"))

Или SQL:
SELECT Фамилия, ДатаРождения
FROM ФДР
WHERE (((DateDiff("yyyy",[ДатаРождения],DATE())+(Format([ДатаРождения],"mmdd")>Format(DATE(),"mmdd")))=18))


Ещё вариант:
Public Function AgeByDateOfBirth(vDateOfBirth As Variant, _
                Optional vForDate = Null) As Long
'es 06.12.2012 - LE 31.05.2021 v003
'Возвращает возраст на текущую дату (или на конкретную дату)
'   при ошибке или пустом аргументе DateOfBirth возвращает -1 (МИНУС ОДИН)
'--------------------------------------------------------------------------
'?AgeByDateOfBirth(#6/12/1987#)
'--------------------------------------------------------------------------
'Аргументы:
'   vDateOfBirth    -  Дата Рождения
'   vForDate        -  Дата на которую рассчитать (по умолчанию = сегодня)
'--------------------------------------------------------------------------
Dim iVal As Integer
Dim sVal As String
On Error GoTo AgeByDateOfBirth_Err
'Проверяем аргументы
    If IsNull(vForDate) Then vForDate = Date

'Разница в годах между датой рождения и датой на которую
    AgeByDateOfBirth = DateDiff("yyyy", vDateOfBirth, vForDate)

'Вычитается один год, если в этом году дня рождения еще не было
    If DateSerial(Year(vForDate), Month(vDateOfBirth), Day(vDateOfBirth)) > vForDate Then
        AgeByDateOfBirth = AgeByDateOfBirth - 1
    End If
    AgeByDateOfBirth = AgeByDateOfBirth & sVal
    
AgeByDateOfBirth_Bye:
    Exit Function

AgeByDateOfBirth_Err:
    AgeByDateOfBirth = -1
    Err.Clear
    Resume AgeByDateOfBirth_Bye
End Function
7 окт 21, 23:37    [22380997]     Ответить | Цитировать Сообщить модератору
 Re: Разница в годах между датами  [new]
Vlad F
Member

Откуда:
Сообщений: 1450
Спасибо, парни.
Инструменты малой информатизации, они малой и есть.
ИТ-гигант на них положил с прибором.
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
Зря я в нее полез, надо возвращаться в большую.
P.S. Прошу без обид.

Сообщение было отредактировано: 7 окт 21, 23:34
7 окт 21, 23:38    [22380998]     Ответить | Цитировать Сообщить модератору
 Re: Разница в годах между датами  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5361
Vlad F
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
22380231 ?
8 окт 21, 06:31    [22381019]     Ответить | Цитировать Сообщить модератору
 Re: Разница в годах между датами  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
Vlad F
...
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
....
sdku
Vlad F,
.....одной строкой кода,уж точно, не обойдетесь
Об этом и говорилось:если надо абсолютно точно-без объемного кода не обойтись, если абсолютная точность не нужна вариант уважаемого Панурга вполне приемлем
Уж не трудовой ли стаж Вы пытаетесь считать - ознакомьтесь с руководящими документами(не помню конкретно)знаю лишь одно-в них год принят 365 суток\мес 30 суток,что значительно упрощает расчет стажа на компьютере,наши любимые бухгалтера\кадровики считают по-другому(тупо вычитая в столбик-не правильно\не в соответствии с руководящим документами) и,как правило,их не устраивает предлагаемый вариант с годом в 365 суток\мес 30 суток-вот в этом и есть основная проблема(по крайней мере лет 10 назад была) и все сводилось к удастся\не удастся убедить заказчика в правильности решения,соответствующего руководящим документам-это есть самое сложное в этой "проблеме"))
8 окт 21, 13:22    [22381192]     Ответить | Цитировать Сообщить модератору
 Re: Разница в годах между датами  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
year(y) - year(x) - iif((month(y)<month(x)) or (month(y)=month(x) AND day(y)<day(x)), 1, 0)
8 окт 21, 15:24    [22381250]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить