Как получить последний день месяца переданной даты js
Напишите функцию getLastDayOfMonth(year, month) , возвращающую последнее число месяца. Иногда это 30, 31 или даже февральские 28/29.
- year – год из четырёх цифр, например, 2012.
- month – месяц от 0 до 11.
К примеру, getLastDayOfMonth(2012, 1) = 29 (високосный год, февраль).
Создадим дату из следующего месяца, но в день передадим 0:
function getLastDayOfMonth(year, month) < let date = new Date(year, month + 1, 0); return date.getDate(); >alert( getLastDayOfMonth(2012, 0) ); // 31 alert( getLastDayOfMonth(2012, 1) ); // 29 alert( getLastDayOfMonth(2013, 1) ); // 28
Обычно даты начинаются с 1, но технически возможно передать любое число, и дата сама себя поправит. Так что если передать 0, то это значение будет соответствовать «один день перед первым числом месяца», другими словами: «последнее число прошлого месяца».
Как вывести последний день месяца и сам месяц текстом?
Как с помощью jquery вывести последний день месяца, и сам месяц? Например: сейчас 23.02.2021 — выводим 28 февраля; сейчас 10.03.2021 — выводим 31 марта.
Отслеживать
задан 23 фев 2021 в 8:11
Frontender Frontender
2,615 23 23 золотых знака 70 70 серебряных знаков 122 122 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
let date = new Date(); let firstDay = new Date(date.getFullYear(), date.getMonth(), 1); let lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0); console.log(firstDay.getDate(), lastDay.getDate()); //----------------------------------------------------// let month = 1; // Февраль let year = 2020; date = new Date(year, month + 1, 0); firstDay = new Date(date.getFullYear(), date.getMonth(), 1); lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0); console.log(firstDay.getDate(), lastDay.getDate()); /* сейчас 23.02.2021 - выводим 28 февраля; сейчас 10.03.2021 - выводим 31 марта.*/ date = new Date(2021, 1, 23); lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0); console.log(lastDay.getDate()); date = new Date(2021, 2, 10); lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0); console.log(lastDay.getDate());
По поводу названия месяца, есть ответ: https://ru.stackoverflow.com/a/721536/191482
Отслеживать
ответ дан 23 фев 2021 в 9:25
Алексей Шиманский Алексей Шиманский
73.5k 12 12 золотых знаков 93 93 серебряных знака 182 182 бронзовых знака
С jQuery не знаю с moment можно примерно так:
const d1 = moment("23.02.2021", "DDMMYYYY") .endOf("month") .toDate() .toLocaleDateString("ru", < day: "numeric", month: "long" >); const d2 = moment("10.03.2021", "DDMMYYYY") .endOf("month") .toDate() .toLocaleDateString("ru", < day: "numeric", month: "long" >); console.log("d1", d1); console.log("d2", d2);
Отслеживать
ответ дан 23 фев 2021 в 9:26
Konstantin Modin Konstantin Modin
1,984 1 1 золотой знак 5 5 серебряных знаков 10 10 бронзовых знаков
- javascript
- jquery
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.30.8412
Момент js: получение первого и последнего дня месяца
Для определения границ текущего месяца с использованием Moment.js, применяйте следующий код:
Скопировать код
let firstDay = moment().startOf('month').format('YYYY-MM-DD'); // Отмечаем начало месяца! let lastDay = moment().endOf('month').format('YYYY-MM-DD'); // Установим конец месяца!
Методы startOf(‘month’) и endOf(‘month’) позволяют корректно определить даты первого и последнего дней месяца.
Комфортная работа с часовыми поясами
К библиотеке Moment.js можно легко применить часовые поясы. В случае с UTC, используйте:
Скопировать код
let firstDayUtc = moment.utc().startOf('month').format('YYYY-MM-DD'); // UTC полночь, начало месяца! let lastDayUtc = moment.utc().endOf('month').format('YYYY-MM-DD'); // UTC полночь, конец месяца!
Использование функции .utc() позволяет трансформировать локальное время в UTC, устраняя проблемы с часовыми поясами.
Возвращение к корням: применение нативного JavaScript
Если у вас нет необходимости в использовании Moment.js, вы можете также воспользоваться нативным JavaScript:
Скопировать код
let date = new Date(), y = date.getFullYear(), m = date.getMonth(); let firstDay = new Date(y, m, 1).toISOString().slice(0, 10); // Стартуем месяц с чистого листа! let lastDay = new Date(y, m + 1, 0).toISOString().slice(0, 10); // Аккуратно завершаем его!
Данный способ преобразует объекты Date в желаемый формат YYYY-MM-DD .
Тонкая настройка и форматирование
Библиотека Moment.js прекрасно подсказывает как работать с различными форматами дат:
Скопировать код
let firstDayWithTime = moment().startOf('month').format('YYYY-MM-DD HH:mm:ss'); // Установим точное время начала месяца! let lastDayWithTime = moment().endOf('month').format('YYYY-MM-DD HH:mm:ss'); // И аккуратно зафиксируем время его завершения.
Формат HH:mm:ss добавляет к дате еще и время, что потребуется при необходимости точности до секунды.
Визуализация
Получение данных о первом и последнем дне текущего месяца с помощью Moment.js визуально напоминает работу с календарем:
Скопировать код
Текущий месяц: Апрель
Скопировать код
let firstDay = moment().startOf('month'); // Отмечаем первый день месяца в календаре. let lastDay = moment().endOf('month'); // И закрываем календарь на последний день месяца.
Вот как это выглядит:
Скопировать код
| Месяц | Первый день () | Последний день () | | ---------------- | ---------------- | ------------------- | | Текущий (Апрель) | 1 апреля | 30 апреля |
Moment.js — незаменимый инструмент для управления временем. ️
Выбор диапазона дат с помощью daterangepicker
Если возникли специфические требования к датам, daterangepicker облегчит решение вашей задачи:
Скопировать код
let dateRangePickerOptions = < startDate: moment().startOf('month'), endDate: moment().endOf('month') >; $('input').daterangepicker(dateRangePickerOptions, function(start, end, label) < alert('Выбран новый диапазон дат: ' + start.format('YYYY-MM-DD') + ' – ' + end.format('YYYY-MM-DD')); >);
daterangepicker предлагает начало и конец месяца как предустановленный диапазон дат, расширяя возможности для настройки UI.
Манипуляции с датами на примере Moment.js
Благодаря Moment.js манипулировать датами становится гораздо проще благодаря таким методам как add() и subtract() . Получим первый и последний дни предыдущей недели:
Скопировать код
let lastWeekFirstDay = moment().subtract(1, 'weeks').startOf('week').format('YYYY-MM-DD'); // Возвращаемся к началу прошлой недели! let lastWeekLastDay = moment().subtract(1, 'weeks').endOf('week').format('YYYY-MM-DD'); // И отмечаем её завершение.
Защита вашего проекта от устаревших функций
Несмотря на все достоинства Moment.js, важно быть в курсе устаревших функций. Ознакомьтесь с официальной документацией. При необходимости экономии пространства рассмотрите более легковесные альтернативы, к примеру, date-fns или Day.js .
Полезные материалы
- Moment.js | Документация — полнейшая документация по Moment.js.
- Получить первую и последнюю дату текущего месяца в JavaScript или jQuery – Stack Overflow — обсуждение особенностей работы с датами в JavaScript.
- Date – JavaScript | MDN — подробное руководство по использованию Date в JavaScript.
- Шпаргалка по Moment.js — удобная шпаргалка по Moment.js.
- GitHub – moment/moment: Parse, validate, manipulate, and display dates in javascript. — репозиторий Moment.js с информацией о внесении изменений и отслеживании ошибок.
- momentjs.com — пошаговое руководство по работе с Moment.js.
- Moment.js | Документация — информация о предстоящих изменениях в Moment.js.
Работа с Date.setFullYear в JS: последний день месяца
Вы можете определить последний день месяца в JavaScript с помощью следующего кода:
Скопировать код
const lastDay = new Date(year, month + 1, 0).getDate();
Не забудьте, что year должен быть полным, например, 2023, а month представляет собой индекс месяца, где 0 соответствует январю, а 11 – декабрю. В благодарность мощности JavaScript, вам не требуется заботиться о високосных годах: они уже учтены автоматически.
Разбираемся с логикой работы
Конструкция new Date(year, month + 1, 0) выглядит немного загадочно, но на самом деле весьма логична. Введение дня как 0 говорит JavaScript отступить на один день назад, тем самым обнаружив последний день предыдущего месяца. Этот подход стандартизован и работает стабильно в различных браузерах.
Тестирование на совместимость с браузерами
Рекомендуется проверить данный метод в различных браузерах, чтобы убедиться в его безошибочной работе. Несмотря на стандартизацию в рамках спецификации ECMAScript, практическая проверка всегда чрезвычайно полезна.
Для мастеров оптимизации
Битовые операции могут пригодиться в некоторых специфичных ситуациях, например при определении високосного года. Хотя они редко нужны при расчёте последнего дня месяца, знание таких операций может быть полезно при реализации более сложных алгоритмов работы с датами.
Визуализация
Процесс определения последнего дня месяца можно визуализировать так: