Приращение месяца в JavaScript удаляет формат ДАТА с помощью setMonth ()

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

var x= 12;
var arriveDate = "28/11/2018"
var currentDate = new Date();
var a_date = new Date(arriveDate);
var max_month = currentDate.setMonth(currentDate.getMonth()+ x);

if (arriveDate === ""){
        $("#arrive_date_error").html("Please don't leave this field blank");
    }
    else if (a_date < currentDate){
        console.info("Please don't select a date in the past")
    }
    else if (a_date > max_month){
        console.info("date in future")
    }

Последний вариант, если кажется, никогда не работает, независимо от того, какой месяц / день / год я пробую. Я решил использовать console.info (max_month), чтобы узнать, в каком месяце он создавался, и он вернул: 1574953488195 Вместо правильного формата: Чт 28 ноя 2019 15:04:48 GMT + 0000

Что я делаю не так и почему меняет формат, когда я пытаюсь изменить месяц объекта даты?

«28/11/2018» не является форматом, поддерживаемым ECMA-262 (или какой-либо известной мне реализацией). Это может привести к неверной дате или дате 11 апреля 2020 года. Или чему-то другому.

RobG 29.11.2018 04:10
Поведение ключевого слова "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
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

setMonth мутирует currentDate, он не возвращает новую дату. Вероятно, вы захотите клонировать дату и установить месяцы этой клонированной даты:

 var max_month = new Date(+currentDate);
 max_month.setMonth(max_month.getMonth() + x);
"... он не возвращает новую дату ни что-то еще" - .setMonth() возвращает количество миллисекунд между 1 января 1970 00:00:00 UTC и обновленной датой.
Andreas 28.11.2018 16:16

Это сработало для меня, спасибо. Будет ли это лучшим решением для получения x месяцев в будущем?

Cameron Ward 28.11.2018 16:20

@cameronWard да, по крайней мере, работает во всех случаях. В долгосрочной перспективе вам захочется взглянуть на momentJS, так как его проще использовать.

Jonas Wilms 28.11.2018 16:22

Очень вероятно, что new Date(currentDate) возвращает неверную дату. Последующие вызовы set / getMonth не меняют этого, это остается недопустимой датой.

RobG 29.11.2018 04:14

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