powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Date Diff считает неправильно
21 сообщений из 21, страница 1 из 1
Date Diff считает неправильно
    #39864132
OkeTurel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

Строю запрос, пишу в бланке: ИмяПоля: DateDiff("yyyy";#07.10.2017#;#19.09.2019#). Возвращает 2 года, хотя надо - 1 год.
Пробую вместо # написать ". То же самое.
Пробую через VBA, функцией age = DateDiff("yyyy", d_s, d_f). Замечу, что d_s и d_f - тип Variant. Возвращает 2 года.
Подумала, может, тип Variant ему не нравится. Пробую использовать функцию CDate. Возвращает 2 года.

Я что-то делаю неверно?
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864160
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OkeTurel,
Очередное наступание на грабли
считайте интервал в днях, а уже потом,определяйте сколько это лет,месяцев,дней
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864165
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OkeTurelПривет всем.

Строю запрос, пишу в бланке: ИмяПоля: DateDiff("yyyy";#07.10.2017#;#19.09.2019#). Возвращает 2 года, хотя надо - 1 год.
Пробую вместо # написать ". То же самое.
Пробую через VBA, функцией age = DateDiff("yyyy", d_s, d_f). Замечу, что d_s и d_f - тип Variant. Возвращает 2 года.
Подумала, может, тип Variant ему не нравится. Пробую использовать функцию CDate. Возвращает 2 года.

Я что-то делаю неверно?

Вы делаете всё верно, только функция сама округляет до полного года, к примеру если разница составляет 1 год и один месяц функция по умолчанию округлит до полного года, то есть выведет 2 года.

Именно в вашем контексте решить проблему очень просто:
ИмяПоля: (DateDiff("yyyy";#07.10.2017#;#19.09.2019#)-1)
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864217
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OkeTurel,

Вы хотите получить число полных лет между датами?
Вот так можно:
Код: vbnet
1.
DateDiff(""yyyy"", Date1, Date2) + (Format(Date2, ""mmdd"") < Format(Date1, ""mmdd""))
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864223
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо сравнивать еще месяц и день
Код: vbnet
1.
DateDiff("yyyy",d_s, d_f) + (format(d_s,"mmdd") > format(d_f,"mmdd"))
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864226
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только уберите двойные кавычки.
Просто я вытащила фрагмент из текстовой строки (там двойные были нужны) и не поправила.
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864284
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извечная проблема:продолжительность месяца реально 28,29,30 и 31 день
Во многих руководящих документах определена продолжительность года-365 дней и месяца-30 дней. При подсчете стажа с годами и месяцами проблем не возникает а вот дни.... Расчет использующий разность между датами в днях даст результат отличный от "вычитания столбиком"(которым обычно пользуются кадровики). Разрешение этого противоречия-главная проблема
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864363
OkeTurel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро.

Да, нужно получить число полных лет между датами - это возраст человека в годах.

Спасибо большое, милые друзья, сколько хороших советов вы мне дали. Сейчас буду разбираться с каждым советом и пробовать.
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864415
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё вариант - форматировать в YYYYMMDD, вычесть, поделить на 10000 и взять целое.

PS. Все эти способы дадут неверные данные для того, кто родился 29 февраля, если текущая дата - 28 февраля невисокосного года.
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864428
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina....PS. Все эти способы дадут неверные данные для того, кто родился 29 февраля, если текущая дата - 28 февраля невисокосного года.
Не все так просто как кажется!(Козьма прутков)
Для получения верного результата надо учитывать количество високосных годов между двумя датами,количество дней в текущем году...
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39864656
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше изучайте документацию.
Функция Diff даёт не чистую разницу по заданному интервалу, а количество переходов между определяемыми значениями.
Т.е. между 07.10.2017 и 19.09.2019 два перехода по значению ГОД с 2017 на 2018 и с 2018 на 2019
Так же если вы попробуете узнать разницу в месяцах между 31.07.2019 и 1.08.2019 по значению МЕСЯЦ, то функция Diff Вам выдаст 1, хотя разница всего 1 день. Но был осуществлён переход с июля на август.

Проблему вычислить интервал между датами обычно решают разными самописными функциями
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39874503
OkeTurel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss, спасибо за пояснения. Хотя непонятно, какую практическую ценность имеет информация о количестве переходов между значениями. Кому понадобится вычислять количество переходов? Видимо, этой функцией пользуются редко. :)
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898622
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем еще раз, не хочу плодить дополнительный топик.

Столкнулся примерно с такой же проблемой. Как верно посчитать разницу дат в месяцах.
К примеру 04.12.2019 и 02.02.2020 по задаче должно выводить три месяца, а не два, как выводит по умолчанию функция datediff.
Есть дикая конструкция на несколько строк, но это не тру.
Как правильно и коротко правильно посчитать количество месяцев в разнице дат, подскажите плиз.
Имеем в виду, что даже если у нас конечная дата 01.01.2020 или 02.02.2020 , то этот огрызок дней идет как дополнительный месяц.
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898647
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если раскладывать на пальцах задачу:
К примеру

дата_начала_договора: 04.12.2019
дата_окончания_договора: 02.02.2020

В заданном промежутке времени присутствует три месяца - декабрь,январь,февраль.
На выходе должно быть число: 3

Самописную VBA функцию использовать не хочу, так как это нужно сделать на уровне запроса. Если пихать вбашную функцию в запрос, то потом возникают проблемы с фильтрацией и сортировкой такого запроса при увеличении записей. Этот вариант не подходит.
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898701
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,
описываю словами вычисляемое поле (лень функции писать)

месяц_конечной_даты - месяц_начальной_даты + 1 +
+(год_конечной_даты - год_начальной_даты) * 12
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898705
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
К примеру

дата_начала_договора: 04.12.2019
дата_окончания_договора: 02.02.2020

В заданном промежутке времени присутствует три месяца - декабрь,январь,февраль.
На выходе должно быть число: 3
То есть ежели начато 31 января и окончено 1 февраля, то результат 2 месяца. хотя период 2 дня? Точно? уж больно как-то странно...
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898721
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
да именно так, количество используемых месяцев в периоде, нужно ,согласно условию задачи. Не зарплату считаем и не стаж . Нужно именно поголовный расчет количества разных месяцев в указанном периоде. Я уже решил проблемку своим вариантом. Проверил все возможные хитрые даты типа високосных годов и прочие западни.

Ну вот мое в копилку если что:
Код: sql
1.
IIf(Day([дата_начала_договора])=Day([дата_окончания_договора]);DateDiff("m";[дата_начала_договора];[дата_окончания_договора]);DateDiff("m";[дата_начала_договора];[дата_окончания_договора])+1)



PS. ИВП, спасибо и за ваш вариант, буду иметь в виду. Итого на руках два рабочих варианта.
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898807
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
в копилку если что
Только там проверка не на равенство нужна, а на больше либо равно (*или меньше либо равно? думать лень...).
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898810
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
не, нормально отрабатывает, (больше или меньше - обратите внимание что сравниваем там Day , ну то есть фактически числа от одного до 7 , что в одном случае,что во втором) обсчитывается во второй части IIF, то есть отсекает. Если больше (или меньше), это автоматом попадает во второй блок вычисления IIF. Хитрость Datediff в том,что Datediff даёт не чистую разницу по заданному интервалу, а количество переходов между определяемыми значениями , Joss чуть выше написал об этом.
Нормально работает, верно. Единственно что надо запретить пользователю вводить даты окончания договора меньше даты начала договора, но это технически уже либо в условии на значение,либо на форме проверку сделаю.
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898818
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
нормально отрабатывает


Гм... вроде для всех трёх записей должно быть два (ноябрь да декабрь), не?
...
Рейтинг: 0 / 0
Date Diff считает неправильно
    #39898820
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
не берите в голову, это частный случай моей задачи, да, если дни совпадают, то надо ставить один период. Самое главное ,что нужное получил. В моем случае это верный ответ.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Date Diff считает неправильно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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