Проблема с методом JavaScript setMonth ()

Кажется, эта функция JavaScript Date.setMonth делает то, для чего не предназначена. Вот фрагмент кода. В этом сценарии мы пытаемся получить последнюю дату каждого месяца.

var d = new Date(2018, 11, 31); // this would set it to Dec 31 2018
d.setMonth(d.getMonth() + 1);   // this would set it to Jan 31 2019
d.setMonth(d.getMonth() + 1);   // this would set it to March 03 2019
alert(d);

Итак, похоже, что функция set month просто добавила 30 дней к предыдущей дате (31 января 2019 года), что неоднозначно. Та же проблема может возникнуть в случае месяца с 30 днями.

Есть ли какой-нибудь обходной путь, который может дать нам точное решение этой проблемы, когда добавление месяцев просто изменит месяцы? и установить дату на последнюю дату, если она не существует?

Он не добавляет 30 дней, он просто меняет месяц. Тот факт, что результирующая дата (2019-02-31) преобразуется в 2019-03-03, полностью согласуется с тем, как объект Date обрабатывает переполненные даты.

Lennholm 18.12.2018 09:22
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
228
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Чтобы получить последнюю дату следующего месяца, используйте следующее:

var d = new Date(2018, 11, 31); // Dec 31 2018
d.setDate(1);                   // first day of current month
d.setMonth(d.getMonth() + 2);   // add *two* months
d.setDate(0);                   // 0 makes the date roll back to previous month
d;                              // Jan 31 2019
Ответ принят как подходящий

Пытаться

new Date(d.getFullYear(), d.getMonth() + 1);

var d = new Date();
var d = new Date(d.getFullYear(), d.getMonth() + 1);
console.info(d); // last day

Для февраля 2019 года дата месяца находится в диапазоне от 1 до 28, но дата уже установлена ​​как 31, поэтому для следующего месяца будет установлена ​​дата 3, потому что 31-28 = 3. Для справки проверьте это.

Чтобы получить последнюю дату месяца, попробуйте следующее:

var d = new Date(2018, 11, 31);  // Dec 31 2018  
var last = new Date(d.getFullYear(), d.getMonth() + 2, 0);
console.info(last); // Jan 31 2019
last = new Date(d.getFullYear(), d.getMonth() + 3, 0);
console.info(last); // Feb 28 2019

это не поможет в случае февраля. Это неверно. он должен вернуться 28 февраля, если вы добавите к нему 2 месяца.

Maulik Modi 18.12.2018 08:42

@MaulikModi Если новая дата месяца установлена ​​на ноль (0), новая дата будет установлена ​​на последний день предыдущего месяца.

Devesh 18.12.2018 09:16

Другие вопросы по теме