Как работает эта магия c new Date?

334
02 августа 2017, 23:20
  // Определим текущий месяц и год
  var month = parseInt(new Date().getMonth());
  var year = new Date().getFullYear();
  // Определим количество дней в месяце
  var total_days = 32 - new Date(year, month, 32).getDate();
  console.log(total_days);

Работает правильно, но что происходит? Как работает строчка где var total_days = вообще не понимаю, узнать дату на 32-й день?

Answer 1

Работа магии основана на том что если в конструктор даты передать количество дней больше чем в текущем месяце, то дата автоматически промотается в следующий месяц.

То есть

new Date(2017, 7, 33)

Вернет не 33 августа а второе сентября.

getDate() вернет порядковый номер дня в месяце соответственно. То есть 2 - для второго сентября, 1 - для первого.

Соответственно передав 32 в конструктор даты для месяца с 30 днями - мы придем на второе число, для месяца с 31 днями - на первое. С 28 днями - на четвертое. Это число и вычитаем.

Соответственно эта магия завязана на неочевидное (хоть и описанное в спецификации) свойство конструктора даты, и я рекомендовал бы такое щедро комментировать.

Answer 2

Полагаю, что Date(year, month, 32) создаёт дату в следующем месяце. Если в этом месяце было 30 дней, то 32 дня от начала текущего месяца - это 2 число следующего. Если в месяце 31 день - это 1 число. Соответственно, getDate() возвращает текущий день, при вычитании из 32 получаем 30 или 31 день в этом месяце.

Answer 3

Date принимает 3 параметра - год, месяц и день месяца. Передать день месяца больший чем есть в указанном месяце то Date автоматически добавит новый месяц (как если бы передавалось количество дней с начала месяца).

Тоесть к примеру 2017-01-32 - будет 2017-02-01 а 2017-02-32 - будет 2017-03-04

READ ALSO
Загрузка ресурсов веб-приложения в кэш

Загрузка ресурсов веб-приложения в кэш

ПриветДля того, чтобы пользователь видел красивый прелоадер загрузки сайта, я использую следующий код:

256
Собрать все js-файлы в один в webpack

Собрать все js-файлы в один в webpack

ПриветНачинаю работать с Webpack и сейчас мой конфиг выглядит так:

380
Какие методы реакта применить?

Какие методы реакта применить?

Мне нужно отправить запрос на url с некоторыми параметрами один раз, когда два поля являются валиднымиА далее уже вызывать этот же метод , но с другими...

265