|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Привет всем. Строю запрос, пишу в бланке: ИмяПоля: 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 года. Я что-то делаю неверно? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 17:52 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
OkeTurel, Очередное наступание на грабли считайте интервал в днях, а уже потом,определяйте сколько это лет,месяцев,дней ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 18:29 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
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) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 18:34 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
OkeTurel, Вы хотите получить число полных лет между датами? Вот так можно: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 20:31 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Надо сравнивать еще месяц и день Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 20:39 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Только уберите двойные кавычки. Просто я вытащила фрагмент из текстовой строки (там двойные были нужны) и не поправила. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 20:43 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Извечная проблема:продолжительность месяца реально 28,29,30 и 31 день Во многих руководящих документах определена продолжительность года-365 дней и месяца-30 дней. При подсчете стажа с годами и месяцами проблем не возникает а вот дни.... Расчет использующий разность между датами в днях даст результат отличный от "вычитания столбиком"(которым обычно пользуются кадровики). Разрешение этого противоречия-главная проблема ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2019, 23:16 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Доброе утро. Да, нужно получить число полных лет между датами - это возраст человека в годах. Спасибо большое, милые друзья, сколько хороших советов вы мне дали. Сейчас буду разбираться с каждым советом и пробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 08:14 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Ещё вариант - форматировать в YYYYMMDD, вычесть, поделить на 10000 и взять целое. PS. Все эти способы дадут неверные данные для того, кто родился 29 февраля, если текущая дата - 28 февраля невисокосного года. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 10:07 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Akina....PS. Все эти способы дадут неверные данные для того, кто родился 29 февраля, если текущая дата - 28 февраля невисокосного года. Не все так просто как кажется!(Козьма прутков) Для получения верного результата надо учитывать количество високосных годов между двумя датами,количество дней в текущем году... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 10:22 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Лучше изучайте документацию. Функция Diff даёт не чистую разницу по заданному интервалу, а количество переходов между определяемыми значениями. Т.е. между 07.10.2017 и 19.09.2019 два перехода по значению ГОД с 2017 на 2018 и с 2018 на 2019 Так же если вы попробуете узнать разницу в месяцах между 31.07.2019 и 1.08.2019 по значению МЕСЯЦ, то функция Diff Вам выдаст 1, хотя разница всего 1 день. Но был осуществлён переход с июля на август. Проблему вычислить интервал между датами обычно решают разными самописными функциями ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2019, 14:38 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Joss, спасибо за пояснения. Хотя непонятно, какую практическую ценность имеет информация о количестве переходов между значениями. Кому понадобится вычислять количество переходов? Видимо, этой функцией пользуются редко. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2019, 12:16 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Привет всем еще раз, не хочу плодить дополнительный топик. Столкнулся примерно с такой же проблемой. Как верно посчитать разницу дат в месяцах. К примеру 04.12.2019 и 02.02.2020 по задаче должно выводить три месяца, а не два, как выводит по умолчанию функция datediff. Есть дикая конструкция на несколько строк, но это не тру. Как правильно и коротко правильно посчитать количество месяцев в разнице дат, подскажите плиз. Имеем в виду, что даже если у нас конечная дата 01.01.2020 или 02.02.2020 , то этот огрызок дней идет как дополнительный месяц. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 14:53 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Если раскладывать на пальцах задачу: К примеру дата_начала_договора: 04.12.2019 дата_окончания_договора: 02.02.2020 В заданном промежутке времени присутствует три месяца - декабрь,январь,февраль. На выходе должно быть число: 3 Самописную VBA функцию использовать не хочу, так как это нужно сделать на уровне запроса. Если пихать вбашную функцию в запрос, то потом возникают проблемы с фильтрацией и сортировкой такого запроса при увеличении записей. Этот вариант не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 15:17 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Сергей Лалов, описываю словами вычисляемое поле (лень функции писать) месяц_конечной_даты - месяц_начальной_даты + 1 + +(год_конечной_даты - год_начальной_даты) * 12 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 16:13 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Сергей Лалов К примеру дата_начала_договора: 04.12.2019 дата_окончания_договора: 02.02.2020 В заданном промежутке времени присутствует три месяца - декабрь,январь,февраль. На выходе должно быть число: 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 16:21 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Akina, да именно так, количество используемых месяцев в периоде, нужно ,согласно условию задачи. Не зарплату считаем и не стаж . Нужно именно поголовный расчет количества разных месяцев в указанном периоде. Я уже решил проблемку своим вариантом. Проверил все возможные хитрые даты типа високосных годов и прочие западни. Ну вот мое в копилку если что: Код: sql 1.
PS. ИВП, спасибо и за ваш вариант, буду иметь в виду. Итого на руках два рабочих варианта. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 16:36 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Сергей Лалов в копилку если что ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 18:42 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Akina, не, нормально отрабатывает, (больше или меньше - обратите внимание что сравниваем там Day , ну то есть фактически числа от одного до 7 , что в одном случае,что во втором) обсчитывается во второй части IIF, то есть отсекает. Если больше (или меньше), это автоматом попадает во второй блок вычисления IIF. Хитрость Datediff в том,что Datediff даёт не чистую разницу по заданному интервалу, а количество переходов между определяемыми значениями , Joss чуть выше написал об этом. Нормально работает, верно. Единственно что надо запретить пользователю вводить даты окончания договора меньше даты начала договора, но это технически уже либо в условии на значение,либо на форме проверку сделаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 18:50 |
|
Date Diff считает неправильно
|
|||
---|---|---|---|
#18+
Сергей Лалов нормально отрабатывает Гм... вроде для всех трёх записей должно быть два (ноябрь да декабрь), не? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 19:01 |
|
|
start [/forum/topic.php?fid=45&msg=39864160&tid=1610343]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
89ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 197ms |
0 / 0 |