Даты в 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 соответственно:

Идеальная практика
Чтобы выкрутиться и избежать нагромождения ненужных проверок специально для Safari, достаточно изменить опорное число 32 на 33. Данный способ работает в Safari пока также хорошо, как и в остальных браузерах:
Получить количество дней в месяце
Пришла только такая идея, но получаю ошибку как можно решить иначе ?
Создать дату первого числа нужного месяца и дату первого числа следующего месяца, и найти разницу в днях между ними.
Элегантный способ получение даты:
![]()
Дизайн сайта / логотип © 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.Одна минутаПроверьте количество операций, когда количество операций .