Как работает функция Date.getDate ()? - PullRequest
1 голос
/ 08 мая 2019

Я планирую написать пару функций date для моего проекта, но не могу понять, почему Date.prototype.getDate возвращает странные числа.Например:

Я запустил следующий код:

alert(new Date(2019, 04, 00).getDate());

В своей голове я ожидал получить 31 (число дней мая), но получил 30!

То же самое произошло со следующим фрагментом:

alert(new Date('2019-04-01').getDate());

В этом случае я ожидал получить 1, потому что согласно документации, найденной в MDN:

getDate() метод возвращает день месяца для указанной даты по местному времени.

Но вместо этого получил 31!

И, наконец, при запуске:

alert(new Date('2019-04-02').getDate());

Я ожидал увидеть 2, но увидел 1!(что никак не связано с предыдущей логикой!)

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 08 мая 2019

Методы Date "исправляют" странные не реальные даты. Если установить дату (день месяца) на ноль, вы получите последний день предыдущего месяца. Все методы установки ведут себя одинаково.

Обратите внимание, что месяцы нумеруются с нуля: январь равен 0, а не 1.

0 голосов
/ 08 мая 2019

код:

new Date(2019, 04, 00)

даст дату для нулевого дня мая 2019 года, которая интерпретируется как последний день апреля, то есть 30-го числа, поэтому:

new Date(2019, 04, 00).getDate()

возвращает 30.

В

new Date('2019-04-01')

строка (нелогично) анализируется как UTC. Метод getDate использует настройку часового пояса хоста для определения локальной даты, поэтому:

new Date('2019-04-01').getDate()

может возвращать 1 (апрель) или 31 (март) в зависимости от того, является ли смещение часового пояса хоста положительным или отрицательным соответственно.

например. для пользователя по UTC + 0530 локальная дата будет 2019-04-01 05:30:00, но для пользователя по UTC-0400 локальная дата будет 2019-03-31 20: 00: 00.

0 голосов
/ 08 мая 2019

В первом случае вы получаете 30, потому что вы проверяете количество дней в 4-м месяце - апреле.Май пятый месяцВот демонстрация - с февралем как 2-ой месяц также:

console.log(new Date(2019, 04, 00).getDate());
console.log(new Date(2019, 05, 00).getDate());
console.log(new Date(2019, 02, 00).getDate());

Второй случай действительно выдает 1:

console.log(new Date('2019-04-01').getDate());

И третий случай действительно производит 2:

console.log(new Date('2019-04-02').getDate());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...