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

читайте справку про функцию-тупо от 21 отнимается 20
Если хотите полные года-сочиняйте сами
А там проблема-сколько февралей по 28 или 29 дней попадает в интервал. В принципе, все решаемо,только несколько громоздко-одной строкой кода,уж точно, не обойдетесь
...
Рейтинг: 0 / 0
Разница в годах между датами
    #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
Разница в годах между датами
    #40102915
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, парни.
Инструменты малой информатизации, они малой и есть.
ИТ-гигант на них положил с прибором.
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
Зря я в нее полез, надо возвращаться в большую.
P.S. Прошу без обид.
...
Рейтинг: 0 / 0
Разница в годах между датами
    #40102929
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
22380231 ?
...
Рейтинг: 0 / 0
Разница в годах между датами
    #40103040
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
...
Вместо планируемых двух строк (полных лет и месяцев) пришлось окостыливать ещё полутора десятками.
....
sdku
Vlad F,
.....одной строкой кода,уж точно, не обойдетесь
Об этом и говорилось:если надо абсолютно точно-без объемного кода не обойтись, если абсолютная точность не нужна вариант уважаемого Панург а вполне приемлем
Уж не трудовой ли стаж Вы пытаетесь считать - ознакомьтесь с руководящими документами(не помню конкретно)знаю лишь одно-в них год принят 365 суток\мес 30 суток,что значительно упрощает расчет стажа на компьютере,наши любимые бухгалтера\кадровики считают по-другому(тупо вычитая в столбик-не правильно\не в соответствии с руководящим документами) и,как правило,их не устраивает предлагаемый вариант с годом в 365 суток\мес 30 суток-вот в этом и есть основная проблема(по крайней мере лет 10 назад была) и все сводилось к удастся\не удастся убедить заказчика в правильности решения,соответствующего руководящим документам-это есть самое сложное в этой "проблеме"))
...
Рейтинг: 0 / 0
Разница в годах между датами
    #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
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Разница в годах между датами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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