Сохранение купленной даты и добавление X времени [дубликата]

1

Я создаю узловое приложение, в котором пользователь может выбрать 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); 

Согласно этому руководству

Теги:
date

2 ответа

1
Лучший ответ

Попробуйте использовать 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 он должен быть частью стандартной библиотеки.

  • 0
    Я попробовал это, я установил момент, используя NPM. Затем я взял и вставил ваш код и отправил свою форму, получив ее в качестве даты покупки "bought" : ISODate("2018-05-01T00:00:00Z"), а затем в качестве даты "warranty" : ISODate("2018-05-01T00:00:00Z"), я использовал 12 месяцев в качестве моего номера для даты гарантии.
  • 0
    К сожалению, изменить момент (купленный .add (гарантированные месяцы, "месяц")) на момент (купленный) .add (гарантийные месяцы, "месяц"), это плохо. Начальная строка изменяет купленный объект, но сначала нужно клонировать его, вызвав момент (купленный), а затем вызвать метод добавления.
Показать ещё 1 комментарий
0

Прочитайте код и комментарии, чтобы понять, почему ваш код не работает должным образом

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" />

Вам также необходимо добавить некоторые ошибки в код.

  • 0
    Спасибо за комментарии, многое объяснил. Мне нравится moment.js из-за своей простоты, хотя, как мне кажется, ваш метод помогает мне больше узнать о vanilla js

Ещё вопросы

Сообщество Overcoder
Наверх
Меню