Ниже приведен мой код 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
Что я делаю не так и почему меняет формат, когда я пытаюсь изменить месяц объекта даты?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


setMonth мутирует currentDate, он не возвращает новую дату. Вероятно, вы захотите клонировать дату и установить месяцы этой клонированной даты:
var max_month = new Date(+currentDate);
max_month.setMonth(max_month.getMonth() + x);
.setMonth() возвращает количество миллисекунд между 1 января 1970 00:00:00 UTC и обновленной датой.
Это сработало для меня, спасибо. Будет ли это лучшим решением для получения x месяцев в будущем?
@cameronWard да, по крайней мере, работает во всех случаях. В долгосрочной перспективе вам захочется взглянуть на momentJS, так как его проще использовать.
Очень вероятно, что new Date(currentDate) возвращает неверную дату. Последующие вызовы set / getMonth не меняют этого, это остается недопустимой датой.
«28/11/2018» не является форматом, поддерживаемым ECMA-262 (или какой-либо известной мне реализацией). Это может привести к неверной дате или дате 11 апреля 2020 года. Или чему-то другому.