Как получить последний день месяца переданной даты javascript
Перейти к содержимому

Как получить последний день месяца переданной даты javascript

  • автор:

Как получить последний день месяца переданной даты javascript

Напишите функцию 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, то это значение будет соответствовать «один день перед первым числом месяца», другими словами: «последнее число прошлого месяца».

Нахождение последнего дня месяца в JavaScript

Используем изученную нами ранее автоматическую корректировку дат, чтобы легко решить нашу задачу. Ведь в JavaScript последний день месяца — это нулевой день следующего месяца.

Для примера определим количество дней в марте 2020 года. Для этого при создании объекта с датой укажем нулевой день апреля (он имеет номер 3 , так как нумерация месяцев с нуля):

let date = new Date(2020, 3, 0); console.log(date.getDate());

Оформите этот способ решения проблемы в виде функции, которая параметрами будет принимать месяц и год и возвращать номер последнего дня этого месяца.

Определите, какой день недели будет в последнем дне пятого месяца 2025 года.

Как получить последний день месяца переданной даты javascript

Создайте функцию getDateAgo(date, days) , возвращающую число, которое было days дней назад от даты date .

К примеру, если сегодня двадцатое число, то getDateAgo(new Date(), 1) вернёт девятнадцатое и getDateAgo(new Date(), 2) – восемнадцатое.

Функция должна надёжно работать при значении days=365 и больших значениях:

let date = new Date(2015, 0, 2); alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015) alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014) alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)

P.S. Функция не должна изменять переданный ей объект date .

Идея проста: нужно вычесть заданное количество дней из date :

function getDateAgo(date, days)

…Но функция не должна изменять объект date . Это очень важно, поскольку внешний код, передающий нам объект, не ожидает его изменения.

Это можно осуществить путём клонирования даты:

function getDateAgo(date, days) < let dateCopy = new Date(date); dateCopy.setDate(date.getDate() - days); return dateCopy.getDate(); >let date = new Date(2015, 0, 2); alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015) alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014) alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)

Запрет выбора некорректной даты в селектах

Пусть у нас есть три селекта, с помощью которых мы можем выбрать год, месяц и день. Давайте сделаем так, чтобы с помощью наших селектов нельзя было выбрать некорректную дату, например, 30 февраля или 31 апреля.

Исходники кода

let yearSelect = document.querySelector(‘#year-select’); let monthSelect = document.querySelector(‘#month-select’); let daySelect = document.querySelector(‘#day-select’); let date = new Date(); let currentYear = date.getFullYear(); let currentMonth = date.getMonth() + 1; let currentDay = date.getDate(); fillSelect(yearSelect, range(currentYear — 10, currentYear + 10)); fillSelect(monthSelect, range(1, 12)); fillSelect(daySelect, range(1, 31)); yearSelect.value = currentYear; monthSelect.value = currentMonth; daySelect.value = currentDay; yearSelect.addEventListener(‘focus’, selectFocusHandle); monthSelect.addEventListener(‘focus’, selectFocusHandle); daySelect.addEventListener(‘focus’, selectFocusHandle); yearSelect.addEventListener(‘change’, selectChangeHandle); monthSelect.addEventListener(‘change’, selectChangeHandle); daySelect.addEventListener(‘change’, selectChangeHandle); function selectChangeHandle() < if (checkDate(yearSelect.value, monthSelect.value, daySelect.value)) < console.log('yes'); >else < console.log('no'); this.value = this.dataset.default; >> function selectFocusHandle() < this.dataset.default = this.value; >function fillSelect(select, arr) < arr.forEach(function(elem) < select.add(new Option(elem)); >); > function range(from, to) < let result = []; for (let i = from; i return result; > //select.add(new Option(‘text’, ‘value’)); function checkDate(year, month, day) < let date = new Date(year, month - 1, day); return date.getFullYear() == year && date.getMonth() == month - 1 && date.getDate() == day; >

Смотрите также

  • видео
    проверка даты на корректность на JavaScript
  • видео
    теория по работе с select на JavaScript
  • видео
    выбор страны и города через select на JavaScript

Трепачёв Дмитрий © 2012-2024
t.me/trepachev_dmitry

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

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