Как я могу добавить несколько месяцев к дате, приходящей из поля формы даты?
С DateJS вы бы добавили, например, шесть месяцев к текущей дате, например так:
Date.today().addMonths(6);
Однако мне нужно добавить 24 месяца не к сегодняшней дате, а к дате, которую пользователь ввел в поле даты. Итак today()
должно быть в принципе заменено чем-то вроде this.getField('begin_date').value
,
Результат должен быть записан в другое поле формы данных.
Я очень старался, но не смог. Может кто-нибудь мне помочь?
2 ответа
Если входное значение является текстовым представлением даты, вам необходимо преобразовать его в Date
Объект на первом месте. Тогда вы можете работать с ним, как вы хотите.
У DateJS довольно умный parse()
функция, которая делает именно это, так что вы бы достигли этого так:
Date.parse(this.getField('begin_date').value).addMonths(24)
Когда нужен определенный формат даты, например DD.MM.YYYY
обычно используется в Европе, вы можете использовать parseExact()
и укажите формат. Как это:
Date.parseExact(dateToParse, 'dd.MM.yyyy') // leading zeroes required; parses 01.04.2014 but not 1.4.2014
Date.parseExact(dateToParse, 'd.M.yyyy') // leading zeroes not required; parses both 01.04.2014 and 1.4.2014
Вот решение, которое я нашел для своей проблемы, используя DateJS:
start = this.getField('begin_date').value;
var d1 = util.scand("dd.mm.yyyy", start);
var myDate = new Date(d1);
result = myDate.addMonths(24);
Это работает довольно хорошо, также охватывает високосные годы, за исключением 28 февраля 2014/2018/2022 ...; результат будет 28 февраля 2016/2020/2024 ... а не 29 февраля 2016/2020/2024 ... В этих случаях пользователь должен принять 28-е число или вручную изменить дату до 29-го.