Javascript дает недействительный месяц, когда месяц установлен на 5

1

Я получаю недопустимую дату, когда я задал месяц как 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)
Теги:

3 ответа

6

Вот что происходит:

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);
4

Сегодня 31 мая 2017 года.

Когда вы установите месяц до 5 который является June, день остается 31 но June 31 нет. В этот момент поведение не определено или, по крайней мере, неясное; все может случиться.

Чтобы избежать этого, создайте дату следующим образом:

var date = new Date(2017, 5, 30);
0

Это связано с тем, что setMonth также установит день, но мы на 31 и в июне, всего 30 дней, поэтому дата изменится до 1 июля. Затем 30 июля благодаря setDay. Попытайтесь установить день раньше, как правило, он должен работать.

  • 0
    Но он установлен на 30 в коде.
  • 1
    @dav: Но после того, как они изменили месяц, в этот момент дата уже была «исправлена».
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню