Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Разница в годах между датами / 8 сообщений из 8, страница 1 из 1
06.10.2021, 18:03
    #40102428
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в годах между датами
Приветствую!
Скажите почему DateDiff("YYYY", "07.11.2018", "06.10.2021", 2) выдает 3, и как исправить, чтобы возвращалось полных лет?
...
Рейтинг: 0 / 0
06.10.2021, 19:03
    #40102450
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в годах между датами
Vlad F
DateDiff("d, "07.11.2018", "06.10.2021")\365.25
...
Рейтинг: 0 / 0
06.10.2021, 20:32
    #40102468
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в годах между датами
Vlad F,
Код: vbnet
1.
2.
?DateDiff("YYYY", #12/31/20#, #1/1/21#)
 1 

читайте справку про функцию-тупо от 21 отнимается 20
Если хотите полные года-сочиняйте сами
А там проблема-сколько февралей по 28 или 29 дней попадает в интервал. В принципе, все решаемо,только несколько громоздко-одной строкой кода,уж точно, не обойдетесь
...
Рейтинг: 0 / 0
07.10.2021, 23:37
    #40102914
Eugene-LS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в годах между датами
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:
Код: sql
1.
2.
3.
SELECT Фамилия, ДатаРождения
FROM ФДР
WHERE (((DateDiff("yyyy",[ДатаРождения],DATE())+(Format([ДатаРождения],"mmdd")>Format(DATE(),"mmdd")))=18))



Ещё вариант:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
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
...
Рейтинг: 0 / 0
07.10.2021, 23:38
    #40102915
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в годах между датами
Спасибо, парни.
Инструменты малой информатизации, они малой и есть.
ИТ-гигант на них положил с прибором.
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
Зря я в нее полез, надо возвращаться в большую.
P.S. Прошу без обид.
...
Рейтинг: 0 / 0
08.10.2021, 06:31
    #40102929
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в годах между датами
Vlad F
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
22380231 ?
...
Рейтинг: 0 / 0
08.10.2021, 13:22
    #40103040
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в годах между датами
Vlad F
...
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
....
sdku
Vlad F,
.....одной строкой кода,уж точно, не обойдетесь
Об этом и говорилось:если надо абсолютно точно-без объемного кода не обойтись, если абсолютная точность не нужна вариант уважаемого Панург а вполне приемлем
Уж не трудовой ли стаж Вы пытаетесь считать - ознакомьтесь с руководящими документами(не помню конкретно)знаю лишь одно-в них год принят 365 суток\мес 30 суток,что значительно упрощает расчет стажа на компьютере,наши любимые бухгалтера\кадровики считают по-другому(тупо вычитая в столбик-не правильно\не в соответствии с руководящим документами) и,как правило,их не устраивает предлагаемый вариант с годом в 365 суток\мес 30 суток-вот в этом и есть основная проблема(по крайней мере лет 10 назад была) и все сводилось к удастся\не удастся убедить заказчика в правильности решения,соответствующего руководящим документам-это есть самое сложное в этой "проблеме"))
...
Рейтинг: 0 / 0
08.10.2021, 15:24
    #40103080
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в годах между датами
Код: sql
1.
year(y) - year(x) - iif((month(y)<month(x)) or (month(y)=month(x) AND day(y)<day(x)), 1, 0)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Разница в годах между датами / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]