Изменить день в новой дате() js без опрокидывания месяц, год или время

#javascript #date

Вопрос:

Привет всем. Можете ли вы помочь мне с такого рода вопросом? Я хочу добавить дни в строку даты, поэтому код выглядит примерно так.

 var date = new Date() date.setDate(date.getDate()   1)  

Проблема в том, что я хочу изменить только дни без месяца, лет или времени (чм). Так, например, если у меня есть дата 31 декабря 2021 года, и я увеличиваю день на один, я хочу получить 01 декабря 2021 года, а не 01 января 2022 года. Возможно ли это в JS?

Ответ №1:

Вам просто нужно будет вручную проверить и настроить, если это необходимо. Вот пример функции:

 var date = new Date('12/31/2021');  incremenetLoopingDate(date); console.log(date);  function incremenetLoopingDate(date){  var mo = date.getMonth();  date.setDate(date.getDate()   1);  if(date.getMonth() !== mo){  date.setMonth(mo);  }  return date; } 

Комментарии:

1. date.setDate(1) Действительно ли это необходимо? Я бы предположил, что при увеличении в следующем месяце число месяца будет равно 1 в качестве побочного эффекта.

2. @JakobLovern Да, ты прав.

Ответ №2:

Похоже на другой ответ, но проще. Просто проверьте, равна ли увеличенная дата 1, и если да, установите значение предыдущего месяца. Обратите внимание, что это изменяет прошедшую дату.

 function incrementMonthLoop(date = new Date()) {  date.setDate(date.getDate()   1);  if (date.getDate() == 1) date.setMonth(date.getMonth() - 1);  return date; }  console.log(  incrementMonthLoop(new Date(2021, 11, 31)).toDateString() );