Неправильное количество дней в Excel

Я пытаюсь рассчитать разницу между днями, но получаю неправильное общее количество дней для этого года. Для дат 2016-01-01 и 2016-12-31 я получаю 365 дней, но не 366. Я использовал следующую функцию, где получаю тот же результат:

=DAYS("2016-12-31","2016-1-1")
=DATEDIF("2016-1-1","2016-12-31","d")
="2016-12-31"-"2016-1-1"

Я не уверен, что делаю не так? Таким образом, високосный год не учитывается должным образом.


person MCM    schedule 20.02.2018    source источник


Ответы (1)


Я думаю, вы неверно истолковываете вывод функции DATEDIF. Рассмотрим следующий вызов функции:

=DATEDIF("2016-12-30", "2016-12-31", "d")

Это возвращает 1 - количество дней между двумя датами. Точно так же следующий вызов возвращает 365:

=DATEDIF("2016-01-01", "2016-12-31", "d")

Значение 365 означает, что между первым днем ​​года (день №1, 1 января) и 366-м днем ​​года (день №366, 31 декабря) есть 365 дней.

В качестве проверки работоспособности запустите следующее:

=DATEDIF("2015-01-01", "2015-12-31", "d")

Это возвращает 364 дня, потому что 2015 год не был високосным, и в его календаре не было 29 февраля.

Обратите внимание, что дата окончания всегда должна быть больше даты начала, иначе вы получите ошибку #NUM!. Звонок, который вы сделали в своем вопросе, даже не сработает.

person Tim Biegeleisen    schedule 20.02.2018
comment
Большое спасибо. Но как правильно получить правильные дни и учесть високосные годы? - person MCM; 20.02.2018
comment
@MCM Думаю, мой ответ был непонятным, или, может быть, вы его не читали. DATEDIF возвращает правильное количество дней независимо от високосного года. Вам нужно всего лишь добавить один, чтобы получить общее количество дней. - person Tim Biegeleisen; 20.02.2018
comment
Большое спасибо. Мне было непонятно, как добавить 1. Но все ли время добавляется одна, независимо от того, какую дату я включаю. - person MCM; 20.02.2018
comment
@MCM Да, потому что это природа разницы в датах. - person Tim Biegeleisen; 20.02.2018
comment
Но, используя логику, которую вы предлагаете для этих дат 2016-06-01 и 2016-09-01, дало бы мне 93 дня вместо 92 - person MCM; 20.02.2018
comment
DATEDIF("2016-06-01", "2016-09-01", "d") дает 92 в результате, что имеет смысл, потому что мы вычитаем день 93 минус день 1. - person Tim Biegeleisen; 20.02.2018
comment
но это каким-то образом связано с ручным добавлением и вычитанием в один прекрасный день. Я ищу универсальную функцию, которая уже знает, что это високосный день или нет, и дает мне правильное количество дней независимо от того, какие даты я указываю - person MCM; 20.02.2018
comment
Я не понимаю, что здесь непонятно. Если я дам вам последовательность 1,2,3,4,5 и прошу указать разницу между 1 и 5, ответ будет 4. Но в последовательности пять, а не четыре числа. . - person Tim Biegeleisen; 20.02.2018
comment
По поводу функции dateif все ясно. Мне нужен был еще метод, который уже напрямую учитывает високосные дни и не смотрит, в каком году он есть, а затем что-то добавляет или нет, и это зависит от дат, которые я включаю. Надеюсь, это понятнее? - person MCM; 20.02.2018
comment
@MCM Datedif работает нормально, и вам не нужно выборочно добавлять к нему 1. Вам необходимо добавить +1 ко всем формулам Datedif или, в качестве альтернативы, вы должны указать startdate - startdate - 1, чтобы включить саму дату, иначе она считается после этой даты. - person PankajR; 20.02.2018
comment
@PankajR, большое спасибо. но почему-то я также получаю с startdate + 1 количество дней, например. 2016-06-01 и 2016-09-01 Я получаю 93 дня, но должно быть 92. - person MCM; 20.02.2018
comment
Не могли бы вы пояснить, как вы относитесь к дате начала или окончания - следует ли их исключить или включить. в данном случае обычно вычисление выглядит следующим образом: июнь + июль + август + 1 день сентября = 30 + 31 + 31 + 1 = 93. Итак, 93 - правильный ответ с добавлением +1. - person PankajR; 20.02.2018
comment
@all, я думаю, теперь у меня есть. - person MCM; 20.02.2018