Не понимаю, почему не работает код как следует в js, кто шарит в датах?
Привет, помогите, делал задание, где надо написать фукнцию, которая покажет последний день месяца, посмотрел уже ответ, что ее можно написать в пару строк с помощью авто исправления, но все же, хотелось бы разобраться.
function getLastDayOfMonth(year, month) {
let date = new Date(year, month , 0);
for(let i = 1; i <= 31; i++) {
date.setDate(i);
if (date.getDate() !== i ) return i -1 ;
}
}
alert( getLastDayOfMonth(2012, 0) );
Почему то на 4 месяце, начинает просто возвращать undefined, хотя с месяцем, никак не взаимодействую, кроме передачи
посмотрел уже ответ, что ее можно написать в пару строк с помощью авто исправления, но все же, хотелось бы разобраться почему именно этот код не работает
penta-bongo, блин, но расчехлил сути вопроса, короче, когда ты выставляешь в начале функции дату в 0, это по сути меняет дату на последний день предыдущего месяца, так как дни начинаются с 1, поэтому циклом ты бежишь уже по прошлому месяцу, если у предыдущего месяца было 31 дней, цикл пройдет все итерации и не достигнет условия getDate() !== i (31 !== 31) на последнем шаге, поэтому return не вызовется и функция вернет undefined, так как другого return в ней нет дальше.
penta-bongo, ну так, оно и вернет undefined, если в месяце 31 день, исправь в цикле условие 31 на 32, хоть это и стремный костыль, и так никогда писать не нужно, но будет работать
penta-bongo, я бы еще добавил, что стоит научится работать с дебаггером и смотреть что происходит внутри функции во время ее выполнения. Если бы Вы просто прошли свою функцию по шагам, с помощью дебаггера, то Вы бы увидели проблему с i == 31 самостоятельно и Вам бы не пришлось тратить время на написание вопроса и ожидание ответа.