Javascript как узнать количество дней в месяце
Перейти к содержимому

Javascript как узнать количество дней в месяце

  • автор:

Даты в JavaScript: количество дней в месяце и некоторые особенности Safari

Не так давно столкнулся с задачей, которая позволила бы получить количество дней в указанном месяце в JavaScript. Штатной функции для этого в языке к сожалению нет.

На эту тему был нагуглен один изящный механизм, использующий одну известную особенность многих языков программирования. Если установить несуществующую дату для какого-либо месяца (например 31 апреля), то в результате нашем объекте будет сохранено соответствующее число следующего месяца (в данном случае — 1 мая).

Таким образом, для того, чтобы получить количество дней в указанном месяце, необходимо отнять результат вышеописанной операции из числа 32. То есть, если задать в качестве даты 32 апреля, в результате мы получим 2 мая. Проверим: 32-2=30 — такое количество дней будет в апреле.

Способ применения

Используя прекрассную возможность прототипирования в JavaScript можно расширить встроенный объект языка Date собственным методом:

Таким образом, чтобы получить количество дней в текущем месяце, достаточно будет обратиться непосредственно к Date:

Однако, как выяснилось со временем на практике — этот способ всё ещё не идеален. По крайней мере не для Safari.

Особенности Safari

Иногда результаты работы этого снипета не совпадали с ожидаемыми, и в Safari вместо привычных 30 и 31 можно было получить единицу. Исследование проблемы показали, что оказывается в Safari не в 100% случаев срабатывает описанная особенность языка при работе с датами. Лучше всего это проиллюстрирует следующий пример:

И вот что мы видим в Chrome 26 и Safari 6 соответственно:

image

Идеальная практика

Чтобы выкрутиться и избежать нагромождения ненужных проверок специально для Safari, достаточно изменить опорное число 32 на 33. Данный способ работает в Safari пока также хорошо, как и в остальных браузерах:

Получить количество дней в месяце

Пришла только такая идея, но получаю ошибку как можно решить иначе ?

Создать дату первого числа нужного месяца и дату первого числа следующего месяца, и найти разницу в днях между ними.

Элегантный способ получение даты:

eccs0103's user avatar

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.6.8.43486

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как лучше всего определить количество дней в месяце с помощью JavaScript?

Я использую эту функцию, но я хотел бы знать, какой самый эффективный и точный способ ее получить.

11 ответов

День 0 — последний день в предыдущем месяце. Поскольку конструктор месяца основан на 0, это работает хорошо. Немного взлома, но это в основном то, что вы делаете, вычитая 32.

Если вы часто вызываете эту функцию, может быть полезно кэшировать значение для повышения производительности.

Вот кеширование версии Ответ FlySwat:

В некоторых ответах (также по другим вопросам) были проблемы с високосным периодом или использовался объект Date. Хотя javascript Date object охватывает примерно 285616 лет (100 000 000 дней) по обе стороны от 1 января 1970 года, мне надоели все виды неожиданной даты несоответствия в разных браузерах (наиболее заметно от 0 до 99). Мне также было любопытно, как его вычислить.

Итак, я написал простой и, прежде всего, небольшой алгоритм для вычисления правильного (Proleptic Gregorian/Astronomical/ISO 8601: 2004 (раздел 4.3.2.1), поэтому year 0 существует и является високосным годом, и поддерживаются отрицательные годы) количество дней для данного месяца и года.
Он использует алгоритм short-circuit bitmask-modulo leapYear (слегка измененный для js) и общий алгоритм mod-8 месяца.

Обратите внимание, что в обозначении AD/BC , год 0 AD/BC не существует: вместо этого год 1 BC является високосным годом!
ЕСЛИ вам нужно учитывать обозначение BC, тогда просто вычтите первый год (в противном случае положительный) год-значение! (Или вычесть год из 1 для дальнейших годовых вычислений.)

Примечание: месяцы должны быть основаны на 1!

Обратите внимание, что это другой алгоритм, а затем поиск магического числа, который я использовал в своем Javascript, подсчитывают день года (1 — 366), потому что здесь дополнительная ветвь для високосного года нужна только в феврале.

Русские Блоги

Как JS получает месяц, количество дней JavaScript Data Data

Как JS получает месяц количество дней

JavaScript получает месяц суток

Интеллектуальная рекомендация

STR внутренний метод

Код результат Перепечатано: https://www.cnblogs.com/kamil/p/5160990.html.

Сортировка кучи

Сортировка кучи Временная сложность построения кучи равна O (n), а временная сложность первой корректировки кучи равна O (logi), поэтомуВ любом случае сложность времени O (nlogn)。 Идея алгоритма: Снач.

Не могу найти my.cnf

Первый шаг — проверить, есть ли Второй шаг, если нет Третий шаг — проверить место установки mysql. ps: можно найти несколько путей, вы просто видитеshareиз Шаг 4 Найдите файл с суффиксом .cnf Нескольк.

EasyAr4 одновременно использует несколько разреженных космических карт

Картинка космического пространства Easyar4 поддерживает одновременное загрузку множественного разреженного пространства карт и используется. Многократные карты космического пространства на самом деле .

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

1. Как правило, вторичный документ выполняет контрольную точку каждый час, объединяет редактирование прокрутки с помощью FSImage. 2.Одна минутаПроверьте количество операций, когда количество операций .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *