Я получаю недопустимую дату, когда я задал месяц как 5 в объекте даты JavaScript. Я знаю, что месяц основан на нулевом значении. поэтому, месяц 5 означает июнь. Но я получаю месяц в июле.
<!DOCTYPE html>
<html>
<body>
<p>Click the button to display the date after changing the month.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo1"></p>
<p id="demo"></p>
<script>
function myFunction() {
var d = new Date();
d.setYear(2017);
d.setMonth(5);
d.setDate(30);
document.getElementById("demo1").innerHTML = d.getMonth();
document.getElementById("demo").innerHTML = d;
}
</script>
</body>
</html>
Output:
6
Sun Jul 30 2017 15:11:20 GMT+0200 (W. Europe Daylight Time)
But, Ideally the output should be:
5
Sat Jun 30 2017 15:11:20 GMT+0200 (W. Europe Daylight Time)
Вот что происходит:
var d = new Date();
//d is today : which is 31st of May (day of your test)
d.setMonth(5)
//5 is June (setMonth starts at 0)
//As 31st of June doesn't exist, it is set as 1st of July.
d.setDate(30)
//d is now 30th of July
Вам лучше использовать полный конструктор Date:
new Date(year, month, date);
Сегодня 31 мая 2017 года.
Когда вы установите месяц до 5
который является June
, день остается 31
но June 31
нет. В этот момент поведение не определено или, по крайней мере, неясное; все может случиться.
Чтобы избежать этого, создайте дату следующим образом:
var date = new Date(2017, 5, 30);
Это связано с тем, что setMonth также установит день, но мы на 31 и в июне, всего 30 дней, поэтому дата изменится до 1 июля. Затем 30 июля благодаря setDay. Попытайтесь установить день раньше, как правило, он должен работать.