Я создаю узловое приложение, в котором пользователь может выбрать bought
дату, используя ввод HTML: <input placeholder="Date Bought" class="textbox-n form-control" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="bought" name="bought">
Затем он сохраняется в mongodb с использованием var bought = req.body.bought;
и пользователь вводит несколько месяцев в другой ввод HTML, который имеет name="warranty"
Мне нужно конвертировать в дату с использованием даты bought
и warranty
месяцев. Как я могу добавить их? Я пробовал это:
var bought = req.body.bought;
var warrantyMonths = req.body.warranty;
var warranty = bought.setMonth(bought.getMonth()+ warrantyMonths);
Согласно этому руководству
Попробуйте использовать Moment.js
Если гарантийные месяцы являются целыми числами, вы можете:
var bought = moment(req.body.bought);
var warrantyMonths = req.body.warranty;
var warranty = moment(bought).add(warrantyMonths, "month");
Moment - это всего лишь оболочка для объекта даты JS, поэтому он бесшовна и проста в использовании. Вы можете установить его как пакет npm, импортировать его на свою страницу и передать ему разные форматированные строки даты (см. Документы) или любой действительный объект даты javascript. Я не могу работать с датами без каких-либо мгновений, imo он должен быть частью стандартной библиотеки.
Прочитайте код и комментарии, чтобы понять, почему ваш код не работает должным образом
function calculateWarranty() {
// get the date text and convert into date Object
var bought = new Date(document.getElementById('bought').value);
// get the number of warranty months and convert to integer (second arguments ensures that the integer is base 10)
// if you do not convert the number, it will do String concatenation while calling dateObj.setMonth(getMonth_int + warrant_string )
// for example: 2017-10-21 will give bought.getMonth() === 9 + "1", which will equal 91 instead of 10
var warrantyMonths = parseInt(document.getElementById('warranty').value, 10);
// display in console for debugging
console.log(bought);
console.log(warrantyMonths);
var boughtMonth = bought.getMonth();
// add bought month and warranty month (both should be integer as stated earlier)
var warrantyMonth = boughtMonth + warrantyMonths;
// set the month to bought object
bought.setMonth(warrantyMonth);
// result
console.log(bought);
}
// adding event listeners on the input boxes
document.querySelector('#bought').addEventListener('change', calculateWarranty);
document.querySelector('#warranty').addEventListener('change', calculateWarranty);
<input id="bought" name="bought" class="textbox-n form-control" type="text" placeholder="Date Bought" onfocus="(this.type='date')" onblur="(this.type='text')" />
<input id="warranty" name="warranty" class="textbox-n form-control" type="number" value="1" />
Вам также необходимо добавить некоторые ошибки в код.
"bought" : ISODate("2018-05-01T00:00:00Z"),
а затем в качестве даты"warranty" : ISODate("2018-05-01T00:00:00Z"),
я использовал 12 месяцев в качестве моего номера для даты гарантии.