Сколько дней в июле в невисокосном году
Високосный год (лат. bis sextus — «второй шестой») — год в юлианском и григорианском календарях, продолжительность которого равна 366 дням — на одни сутки больше продолжительности обычного, невисокосного года. В юлианском календаре високосным годом является каждый четвёртый год, в григорианском календаре из этого правила есть исключения.
Год — условная единица измерения времени, которая исторически означала однократный цикл сезонов (весна, лето, осень, зима). В большинстве стран календарная продолжительность года равна 365 или 366 дням. В настоящее время год употребляется также в качестве временной характеристики обращения планет вокруг звёзд в планетарных системах, в частности Земли вокруг Солнца.
Календарный год в григорианском и юлианском календарях равен 365 суток в невисокосные годы, и 366 суток в високосные годы. Средняя же продолжительность года составляет 365,2425 суток для григорианского и 365,25 суток для юлианского календарей.
Календарный год в исламском календаре содержит 353, 354 или 355 суток — 12 лунных месяцев. Средняя продолжительность года — 354,37 суток, что меньше тропического года и поэтому мусульманские праздники «кочуют» по временам года.
Календарный год в еврейском календаре содержит 353, 354 или 355 суток в простом году и 383, 384 или 385 суток в високосном году. Средняя продолжительность года — 365,2468 суток, что близко к тропическому году.
Продолжительность тропического года (время между двумя весенними равноденствиями) составляет 365 суток 5 часов 48 минут 46 секунд. Различие в продолжительности тропического года и среднего юлианского календарного года (365,25 суток) составляет 11 минут 14 секунд. Из этих 11 минут и 14 секунд приблизительно за 128 лет складываются одни сутки.
По истечении столетий было замечено смещение дня весеннего равноденствия, с которым связаны церковные праздники. К XVI веку весеннее равноденствие наступало примерно на 10 суток раньше 21 марта, используемого для определения дня Пасхи.
Чтобы компенсировать накопившуюся ошибку и избежать подобного смещения в будущем, в 1582 году римский папа Григорий XIII провёл реформу календаря. Чтобы средний календарный год лучше соответствовал солнечному, было решено изменить правило високосных лет. По-прежнему високосным оставался год, номер которого кратен четырём, но исключение делалось для тех, которые были кратны 100. Отныне такие годы были високосными только тогда, когда делились ещё и на 400.
Иными словами, год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо он кратен 100, но при этом не кратен 400.
Последние годы столетий, оканчивающиеся на два нуля, в трёх случаях из четырёх не являются високосными. Так, годы 1700, 1800 и 1900 не являются високосными, так как они кратны 100 и не кратны 400. Годы 1600 и 2000 — високосные, так как они кратны 400. Годы 2100, 2200 и 2300 — невисокосные. В високосные годы вводится дополнительный день — 29 февраля. Католический же мир живет по юлианскому календарю. В отличие от юлианского, григорианский календарь учитывает лишь один объект — Солнце.
Сечас мы живем по григорианскому календарю (новый стиль), до революции жили по юлианскому (старый стиль). Разница между старым и новым стилями составляла в XVIII веке 11 суток, в XIX веке — 12 суток, в XX- XXI веках — 13 суток. В XXII веке эта разница будет составлять уже 14 суток. Григорианский календарь введён при Советской власти с 14 февраля 1918 (после 31 января шло уже не 1 февраля, а сразу 14-е).
2032, 2028, 2024, 2020, 2016, 2012, 2008, 2004, 2000, 1996, 1992, 1988, 1984, 1980, 1976, 1972, 1968, 1964, 1960, 1956, 1952, 1948, 1944, 1940, 1936, 1932, 1928, 1924, 1920, 1916, 1912, 1908, 1904, По григорианскому календарю 1900 — невисокосный год, по юлианскому — високосный. 1896.
Замечание: Для большинства компьютерных и мобильных систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038.
Функция количества високосных дней в периоде
Как известно «Лень – двигатель прогресса». В своей работе однажды я столкнулся задачей, когда нужно было составить таблицу расчёта процентов по договору займа, где за базу должно было быть фактическое количество дней в году. Неудобство составляло то, что нужно было не забыть про високосные года и разделять дни, которые относятся к високосному году и дни не високосных лет. Была написана простенькая формула, но позже я выяснил, что расчётом високосных лет не всё так просто.
Описание проблемы
Мне захотелось улучшить формулу. В интернете я нашёл много текстов программ, где вычислялось количество високосных или невисокосных лет и дней в периоде. Но, к сожалению, мен не устраивал тот факт, что скорость работы данных функций зависела от количества лет в периоде. А хотелось, чтобы независимо от того, сколько лет в периоде, функция работала также быстро. Но в ходе разработки мне пришлось ограничить допустимый период работы функции.
Причина 1
Большинство стран живут по Григорианскому календарю, правила високосных лет для которого были определены ещё 1582 году римским папой Григорием XIII:
1. Год, номер которого кратен 400, — високосный;
2. Остальные годы, номер которых кратен 100, — невисокосные (например, годы 1700, 1800, 1900, 2100, 2200,2300)
3. Остальные годы, номер которых кратен 4, — високосные.
Также существует неоднозначность в мнениях определения високосных лет таких как 2900, 3200, 4000, поэтому я решил ограничить функцию максимальной датой 01.01.2900.
Причина 2
Пользовательская функция в Excel создаётся на языке VBA (Visual Basic for Applications). Несмотря на то, что интерпретатор данного языка встроен в MS Office, я обнаружил некоторые отличия в работе с датами.
Excel поддерживает две системы дат, так называемые системы 1900 и 1904. По умолчанию используется система 1900. Это означает, что число 1 введённое в ячейку соответствует 01 января 1900 года, 2 – 2 января и так далее.
В VBA есть функция CDate(expression), которая приводит к типу Date введённое значение. И если этой функции передать число 1, то она вернёт переменную типа Date с датой 31 декабря 1899 года. А вот для числа 60 функция CDate вернёт 28.02.1900, а то же значение введённое в ячейку будет отображать 29.02.1900 (хотя, конечно, 1900 год високосным не является). Далее, начиная с 01 марта 1900 года значения дат выравниваются.
Такое поведение Excel, давно известно компании Microsoft и было принято решение оставить как есть, нужно просто учитывать его. Поэтому и появилось второе ограничение минимальной даты периода 01 марта 1900 года.
Алгоритм решения
Для того, чтобы скорость вычисления количества (не)високосных не зависела от количества дней между датами мне нужно было разработать некую формулу или алгоритм, где не было бы никаких циклов.
Так как все делители, с помощью которых мы можем определить високосность года кратны 4, то я решил разбить все годы на блоки по 4 (квартеты) начиная с 1 года. То есть 1-й блок начинается с 1 года и заканчивается 4, 2-й блок с 5 по 8 и так далее.
В каждом блоке год будет иметь свой индекс от 1 до 4 (например, 2021 год это 506-й блок, индекс в блоке 1)
Теперь мы можем разделить вычисление на 3 блока:
В зависимости от года параметров и индексов квартетов формула расчёта количества дней високосного года будет следующей:
Если год начальной и конечной даты равны и год високосный:
Если год начальной даты невисокосный, а конечной високосный и индексы квартета начальной даты и конечной равны, то:
Если год начальной даты високосный, а конечной нет, то:
Ну и наконец, если год начальной даты невисокосный и конечной тоже, индексы квартетов разные и в текущем индексе квартета есть високосный год, то в 1-м квартете количество дней високосного года лежащего внутри периода будет 366 (так как невисокосные года квартета с 1 по 3, а вторая дата лежит в одном из следующих квартетов).
Выше указанная логика расчёта количества дней високосных лет для первого квартета реализована следующей функцией на VBA:
Функция високосных дней для первого квартета
Private Function first_quartet_leap_year_days(ByVal d_begin As Date, ByVal d_end As Date) As Long Dim result As Long result = 0 Dim year_diff As Long Dim quartet_index_diff As Long year_diff = year(d_end) - year(d_begin) quartet_index_diff = quartet_index(year(d_end)) - quartet_index(year(d_begin)) If year_diff = 0 And is_year_leap(d_begin) Then result = DateDiff("d", d_begin, d_end) first_quartet_leap_year_days = result Exit Function End If If quartet_index_diff = 0 Then If is_year_leap(d_begin) Then result = DateDiff("d", d_begin, CDate(DateSerial(year(d_begin), 12, 31))) first_quartet_leap_year_days = result Exit Function End If If is_year_leap(d_end) Then result = DateDiff("d", CDate(DateSerial(year(d_end) - 1, 12, 31)), d_end) first_quartet_leap_year_days = result Exit Function End If Else If is_year_leap(d_begin) Then result = DateDiff("d", d_begin, CDate(DateSerial(year(d_begin), 12, 31))) first_quartet_leap_year_days = result Exit Function Else If Not is_quartet_noleap(quartet_index(year(d_begin))) Then result = 366 first_quartet_leap_year_days = result Exit Function End If End If End If first_quartet_leap_year_days = result End Function
Если разница индексов квартетов начальной и конечной даты >0, то рассчитывается 3-й блок формулы «Количество високосных дней в последнем квартете».
Здесь формула только одна, где при условии, что год конечной даты високосный:
Функция високосных дней для последнего квартета
Private Function last_quartet_leap_year_days(ByVal d_begin As Date, ByVal d_end As Date) As Long Dim result As Long result = 0 Dim quartet_index_diff As Long quartet_index_diff = quartet_index(year(d_end)) - quartet_index(year(d_begin)) If quartet_index_diff > 0 Then If is_year_leap(d_end) Then result = DateDiff("d", CDate(DateSerial(year(d_end) - 1, 12, 31)), d_end) End If End If last_quartet_leap_year_days = result End Function
Если разница индексов квартетов начальной и конечной даты >1, то рассчитывается 2-й блок формулы «Количество високосных дней в промежуточных квартетах».
При этом К полных столетий – означает разность индексов столетий между датами. Например 1999 – индекс столетия 19, а 2001 – 20, таким образом разность столетий 1.
Аналогично и 400-летий.
Функция для расчёта високосных дней в промежуточных квартетах
Private Function middle_quartets_leap_year_days(ByVal d_begin As Date, ByVal d_end As Date) As Long Dim quartet_count As Long quartet_count = middle_quartets_count(d_begin, d_end) If quartet_count = 0 Then middle_quartets_leap_year_days = 0 Exit Function End If Dim q_begin, q_end As Long q_begin = quartet_index(year(d_begin)) q_end = quartet_index(year(d_end)) - 1 Dim quot_25, quot_100 As Integer quot_25 = WorksheetFunction.Quotient(q_end, 25) - WorksheetFunction.Quotient(q_begin, 25) quot_100 = WorksheetFunction.Quotient(q_end, 100) - WorksheetFunction.Quotient(q_begin, 100) Dim result As Long result = (quartet_count - quot_25 + quot_100) * 366 middle_quartets_leap_year_days = result End Function
Реализация функций
Функция вычисления високосных дней для периода:
Public Function LEAP_DAYS(ByVal val_begin As Long, ByVal val_end As Long, Optional count_first_day = 0, Optional count_last_day = 1) As Long Dim d_begin, d_end As Date count_first_day = IIf(count_first_day <> 0, 1, 0) count_last_day = IIf(count_last_day <> 0, 1, 0) d_begin = CDate(val_begin) d_end = CDate(val_end) Dim check_error As Variant check_error = check_constrains(d_begin, d_end) If IsError(check_error) Then LEAP_DAYS = check_error Exit Function End If Dim result As Long result = 0 If is_year_leap(d_begin) And count_first_day = 1 Then result = result + 1 If is_year_leap(d_end) And count_last_day = 0 Then result = result - 1 result = result + first_quartet_leap_year_days(d_begin, d_end) _ + middle_quartets_leap_year_days(d_begin, d_end) _ + last_quartet_leap_year_days(d_begin, d_end) LEAP_DAYS = result End Function
В приведённом выше коде мы сначала приводим значения параметров count_first_day и count_last_day к значению 1 или 0. Затем мы объявляем переменные типа Date для даты начала и окончания периода и задаём значения. Далее следует проверка параметров на ограничения.
По умолчанию функция не учитывает первый день периода, но учитывает последний день периода, но с помощью необязательных параметров указанных абзацем выше можно изменить это поведение. В строках 23-24 мы корректируем результат функции в зависимости от параметров.
Далее идёт сложение результатов промежуточных функций, которые были выше описаны.
Заключение
Таким образом мы получили формулы расчёта количества дней високосных и невисокосных лет в заданном периоде, скорость которой не зависит от количества дней в периоде. Единственный минус это то, что формула способна корректно работать только в рамках одной тысячи лет (2900 — 1900). Думаю, что до 2900 года у нас есть ещё время усовершенствовать такую функцию.
Ниже ссылка на гитхаб, где выложена полная реализация функций подсчёта високосных и невисокосных дней в периоде на VBA предназначенная для работы в Excel. Вы легко сможете портировать эту функцию на Ваш любимый язык и пользоваться в своих проектах.
Источники и дополнительные ссылки
- Статья из журнала «Главная книга» «Считаем проценты по займу: день первый, день последний»
- Excel неправильно предполагает, что 1900 год является високосным годом.
- Статья из Википедии «Григорианский календарь»
Сколько дней будет в 2023 году: высокосный он или нет
Высокосный год — это год солнечного календаря, который на один день длиннее обычного. То есть, он длится 366, а не 365 дней. Самым распространенным сегодня на планете считается Григорианский календарь, согласно которому «дополнительным» днем в високосном году является 29 февраля.
Особый високосный год ввели в исчисление для того, чтобы выровнять временное смещение, возникающее из-за разницы между тропическим годом (период вращения солнца) и общепринятым календарем. В первом — 365 суток 5 часов и 49 минут. Если бы не было высокосных лет, то ежегодное наложение в почти 6 часов со временем дало бы постепенное смещение сезонов, что могло вызвать недоразумения и неудобства.
О смещении сезонов люди подумали уже давно. Еще в 45 году до н.э. был впервые введен високосный год. Сделал это Юлий Цезарь для своего «юлианского» календаря. Тогда дополнительные сутки были не в феврале, а в марте. Они назывались «bis sextus», и это был второй шестой день месяца.
Не раз система исчисления совершенствовалась. В результате был создан современный календарь, действующий с 1582 года.
Как рассчитать, будет ли 2023 год высокосным
Особые «высокосные» года те, цифра которых кратна 4 и не делится на 100. Хотя и здесь есть исключения — все годы, которые кратны 400 (например, 1600, 2000, 2400).
Итак, чтобы рассчитать, будет ли 2023 год высокосным, нужно запомнить три основных правила:
- если цифра года кратна 400 — 366 суток в году;
- если цифра кратна 4 и не кратна 100 – также 366 суток в году;
- если цифра не кратна 100 и не кратна 400 – 365 суток в году.
Таким образом, произведя простой расчет, можно понять, что 2023 год не будет высокосным. Количество его суток будет равно 365, а в феврале будет 28 дней.
В ближайший высокосный год будет 2024, а еще в этом столетии годами на 366 дней будут:
Классический календарь на 2023 год
Следует обратить внимание, что вся разница высокосного и невысокосного года в количестве дней февраля. Все остальные месяцы имеют фиксированное количество суток (30 или 31).
Предлагаем вам полный классический календарь на 2023 год с указанием того, сколько дней в феврале и других месяцах:
То есть невисокосный 2023 начнется в воскресенье, 1 января, и закончится также в воскресенье, 31 декабря.
Узнать выходные и праздники, которые ждут украинцев 2023 года, можно из нашего материала.
Будет ли 2023 год высокого года по Восточному календарю
По Восточному календарю Новый год Черного Водяного Кролика придет к нам 22 января 2023 и продлится до 9 февраля 2024, когда уступит место году Зеленого Деревянного Дракона.
То есть, по китайской традиции, этот год продлится 383 дня. А еще 2023 год будет высокосным согласно этому календарю. А все потому, что Восточный календарь связан с солнечно-лунным циклом.
Есть и другие особенности, отличающие китайский календарь от того, которым пользуются украинцы:
- более выраженная разница между обычным и высокосным годом (как правило, обычный год по Восточному календарю длится 353-355 суток, а высокосный — 383-385 суток);
- в високосный год здесь прибавляют не один день, а целый месяц;
- Восточный календарь циклический (один цикл – 60 лет), а привычный для нас календарь бесконечен;
- в Китае нет цифрового обозначения года, вместо этого каждый год имеет своего покровителя и стихию (например, 2023 год будет годом Черного Водяного Кролика).
Нынешний китайский 60-летний цикл начался 2 февраля 1984 года. То есть грядущий 2023 год будет 40-ым в цикле.
Читайте также:
- Новый год 2023: какое животное станет символом по восточному календарю и чего от него ждать
- Основные цвета Нового 2023 по восточному календарю: принесут счастье и успех
Учитываем изменения при расчете отпускных в 2023 г.
С 01.01.2023 Инструкция по расчету среднего заработка (далее — Инструкция N 47) действует в новой редакции. Рассмотрим, как в новом году учесть эти нововведения при исчислении среднего заработка, сохраняемого за время трудового отпуска.
1. Изменение среднемесячного количества календарных дней
С 01.01.2023 привычное всем среднемесячное количество календарных дней 29,7 уменьшается до 29,6 (п. 6, абз. 4 ч. 1 п. 10, ч. 2 п. 12 Инструкции N 47, п. 1 Постановления N 63).
На протяжении многих лет это число являлось неизменным и применялось при расчете отпускных независимо от того, в каком году производился такой расчет.
1.1. Чем вызвано такое изменение
Среднемесячное количество календарных дней рассчитывается в среднем за 5 лет. При этом из общего числа календарных дней вычитают государственные праздники и праздничные дни, которые объявлены нерабочими, поскольку такие дни не включаются в число календарных дней трудового отпуска и не оплачиваются (ч. 2 ст. 151 ТК).
Сейчас таких дней 10, а до 2020 г. их было 9 (п. 3 Указа N 157).
С учетом изменившегося количества государственных праздников и праздничных дней, которые объявлены нерабочими, среднемесячное количество календарных дней в среднем за 5 лет составит 29,6 (((366 дн. + 4 x 365 дн.) / 5 лет — 10 праздн. нераб. дн.) / 12 мес., где 366 и 365 — это количество календарных дней в високосном и невисокосном году соответственно).
1.2. Как это отразится на сумме отпускных работнику
Простые арифметические действия позволяют сделать вывод о том, что уменьшение среднемесячного количества календарных дней при равных условиях приводит к увеличению среднедневного заработка.
Пример
Работнику предоставляется трудовой отпуск на 24 календарных дня. Сумма заработной платы, принимаемой для расчета отпускных, за 12 месяцев, предшествующих месяцу ухода в отпуск, составляет 18000 руб.
Ранее применялось среднемесячное количество календарных дней, равное 29,7. Среднедневной заработок составлял 50,51 руб. (18000 руб. / 12 мес. / 29,7), а сумма отпускных — 1212,24 руб. (50,51 руб. x 24 дн.).
С 01.01.2023 применяется среднемесячное количество календарных дней, равное 29,6 Среднедневной заработок составит 50,68 руб. (18000 руб. / 12 мес. / 29,6), а сумма отпускных — 1216,32 руб. (50,68 руб. x 24 дн.).
Разница в расчетах равна 4,08 руб. (1216,32 руб. — 1212,24 руб.).
1.3. Как применять эти изменения
Согласно устным разъяснениям специалистов Минтруда и соцзащиты при решении вопроса о том, какое среднемесячное количество календарных дней (какая редакция Инструкции N 47 применяется, необходимо ориентироваться на дату совершения хозяйственной операции — дату начисления отпускных.
Пример
Трудовой отпуск работнику предоставляется с 03.01.2023.
Отпускные должны быть выплачены не позднее чем за 2 дня. То есть крайний срок — 31.12.2022. Но поскольку 31.12.2022 приходится на субботу, то отпускные должны быть выплачены не позднее 30.12.2022 (ч. 3 ст. 73, ст. 176 ТК).
Это значит, что средний заработок, сохраняемый за время трудового отпуска, рассчитывается в декабре 2022 г. и на этот момент еще действуют нормы старой редакции Инструкции N 47.
Следовательно, среднедневной заработок рассчитывается с применением среднемесячного количества календарных дней, равного 29,7.
Исчисленный таким образом среднедневной заработок в январе 2023 г. не пересчитывается.
При этом неважно, какой период используется для расчета отпускных.
Пример
Работнику организации с 09.01.2023 предоставляется трудовой отпуск (начисление отпускных производится в январе 2023 г.).
Для расчета отпускных принимается период с января 2022 г. по декабрь 2022 г.. Несмотря на то что все эти месяцы приходятся на 2022 г. (период действия старой редакции Инструкции N 47), для расчета среднедневного заработка применяется среднемесячное количество календарных дней, равное 29,6.
2. Включение в расчет отпускных отдельных выплат
В п. 15 Инструкции N 47, регулирующий порядок включения в расчет отпускных отдельных выплат, внесены корректировки.
Определено, что выплаты, обусловленные системами оплаты труда и начисляемые за предшествующие отчетные периоды, суммы индексации заработной платы, доплаты до размера минимальной заработной платы, единовременное пособие на оздоровление, выплачиваемое работникам государственных органов, а также государственных учреждений и иных государственных организаций, обеспечивающих деятельность Президента Республики Беларусь или государственных органов, работники которых в соответствии с законодательными актами, закрепляющими их правовой статус, являются государственными гражданскими служащими, включаются в заработную плату того месяца, на который они приходятся согласно лицевому счету.
Данные корректировки носят редакторский характер и направлены на обобщение наименования структурных элементов заработной платы в связи с многообразием названий выплат в организациях. При этом такие корректировки не влекут за собой изменения в порядке расчета среднего заработка.
Это значит, что, как и ранее, ежемесячные (квартальные, полугодовые) премии, краткосрочные бонусы, вознаграждения, в том числе по итогам работы за год, за выслугу лет включаются при расчете отпускных в заработную плату того месяца, на который они приходятся согласно лицевому счету.
Пример
В январе 2023 г. работнику начислено вознаграждение по итогам работы за 2022 г.
При расчете отпускных данная выплата включается в состав заработной платы за январь 2023 г. При этом сумма вознаграждения, включаемая в расчет, определяется пропорционально месяцам, оставшимся для расчета, по отношению ко всему периоду, принятому для расчета отпускных (п. 15, ч. 1 п. 16 Инструкции N 47).
Кроме того, изменившаяся формулировка нормы п. 15 Инструкции N 47 снимает вопрос о порядке включения в расчет отпускных корректировок начисленных выплат (доначисления ошибочно не начисленных вовремя выплат): такие суммы учитываются в заработной плате того месяца, на который она приходится согласно лицевому счету.
Пример
В январе работнику начислена надбавка за сложность и напряженность труда. В феврале обнаружено, что в результате счетной ошибки надбавка начислена в заниженном размере. В феврале ошибка исправлена: надбавка за январь доначислена.
При исчислении отпускных доначисленная сумма надбавки за январь включается в заработок февраля (месяца, на который согласно лицевому счету приходится доначисленная сумма).
Читайте этот материал в ilex >>*
* по ссылке Вы попадете в платный контент сервиса ilex