Intereting Posts

Добавление месяцев к дате в JavaScript

Возможный дубликат:
Функция Javascript для добавления X месяцев к дате

Я хотел бы добавить 2 месяца к дате ввода пользовательского ввода. Как я могу добавить 2 месяца до даты окончания и показать его?

/** * Click "Cal" on end date */ function getEndDate() { if(!document.getElementById('startdate').value.length) { alert("Start date must be set first."); } else { prevEndDate = document.getElementById('enddate').value; displayCalendar(document.forms[0].enddate,'yyyy/mm/dd', document.getElementById('enddatebutton')); } } /** * Click "Cal" on expiry date */ function getExpiryDate() { if(!document.getElementById('enddate').value.length) { alert("End date must be set first."); } else { prevExpiryDate = document.getElementById('expirydate').value; displayCalendar(document.forms[0].expirydate,'yyyy/mm/dd', document.getElementById('expirydatebutton')); } } 

Любая помощь приветствуется. Благодаря!

Вам нужно получить бизнес-правила для добавления месяцев. Простое решение:

 function addMonths(dateObj, num) { return dateObj.setMonth(dateObj.getMonth() + num); } 

Однако это изменится с 31 июля по 31 сентября, которое будет преобразовано в 1 октября. Кроме того, 31 января плюс 1 месяц – 31 февраля, который будет конвертирован в 2 или 3 марта в зависимости от того, является ли это високосным годом или нет.

Вы можете ожидать, что первое будет 30 сентября, а второе – 28 или 29 февраля (в зависимости от того, является ли это високосным годом или нет).

Поэтому, если вы хотите увидеть «конец месяца», вам нужно сделать что-то вроде:

 function addMonths(dateObj, num) { var currentMonth = dateObj.getMonth() + dateObj.getFullYear() * 12; dateObj.setMonth(dateObj.getMonth() + num); var diff = dateObj.getMonth() + dateObj.getFullYear() * 12 - currentMonth; // If don't get the right number, set date to // last day of previous month if (diff != num) { dateObj.setDate(0); } return dateObj; } 

Но проконсультируйтесь с тем, кто несет ответственность за бизнес-правила, которые они хотят.

редактировать

Вышеизложенное работает хорошо, но в ответ на комментарий Макшамана здесь представлена ​​версия с более простой проверкой на перемотку месяца:

 function addMonths(date, months) { var d = date.getDate(); date.setMonth(date.getMonth() + +months); if (date.getDate() != d) { date.setDate(0); } return date; } // Add 12 months to 29 Feb 2016 -> 28 Feb 2017 console.log(addMonths(new Date(2016,1,29),12).toString()); // Subtract 1 month from 1 Jan 2017 -> 1 Dec 2016 console.log(addMonths(new Date(2017,0,1),-1).toString()); // Subtract 2 months from 31 Jan 2017 -> 30 Nov 2016 console.log(addMonths(new Date(2017,0,31),-2).toString()); // Add 2 months to 31 Dec 2016 -> 28 Feb 2017 console.log(addMonths(new Date(2016,11,31),2).toString()); 

Разделите свою дату на год, месяц и день, а затем используйте Date :

 var d = new Date(year, month, day); d.setMonth(d.getMonth() + 8); 

Дата позаботится о фиксации года.

Возможный дубликат Как добавить месяцы к дате в JavaScript?