Контекст: Программный инструмент для планирования / управления событиями
Цель: Клонировать событие предыдущего года - и дать пользователю преимущество при выборе даты начала и окончания события.
Допущение: Это новое событие вероятно повторение / событие по сравнению с прошлым годом. Таким образом, событие октября 2018 года будет клонировано на октябрь 2019 года.
Пример:
Клонируемое событие имело дату начала: четверг, 20 октября 2016 года, и дату окончания: четверг, 3 ноября 2016 года (включая даты установки и завершения мероприятия)
Ожидаемый результат:
- Количество дней в диапазоне дат сохраняется. (14 дней)
- День недели сохраняется. (Четверг для обоих)
Код должен возвращать новую дату начала:
Чт, 17 октября 2019 года и дата окончания: Чт, 31 октября 2019 года
Дополнительно: Другой приемлемый диапазон дат может быть:
Четверг, 24 октября 2019 года и дата окончания 7 ноября 2019 года
Возможная логика:
Я думаю, что ожидаемый результат мог бы быть достигнут путем захвата месяца, недели этого месяца и дня этой недели - и создания новой даты события этого нового года.
Вопросы:
Я хочу использовать библиотеку Moment.js , если это возможно
Вариант использования / Фактический дизайн
Ожидаемый результат / Примеры
Текущий код:
Это то, что мы имеем в настоящее время, но это не возвращает ожидаемый результат. Кажется, просто вычитать день, независимо от разницы в год.
const today = moment();
const thisYear = today.format('YYYY');
const old_start = moment('2018-10-08');
const old_end = moment('2018-08-12');
// if in same year, use current dates
if (thisYear === old_start.format('YYYY')) {
console.log({
start: new_start.format('YYYY-MM-DD'),
end: new_end.format('YYYY-MM-DD')
})
} else {
console.log({
start: new_start.year(thisYear)
.isoWeek(old_start.isoWeek())
.isoWeekday(old_start.isoWeekday())
.format('YYYY-MM-DD'),
end: new_end.year(thisYear)
.isoWeek(old_end.isoWeek())
.isoWeekday(old_end.isoWeekday())
.format('YYYY-MM-DD')
})
}
Полученные неверные даты:
Буду признателен за любую помощь в том, что мы здесь делаем неправильно и как мы можем это исправить. Спасибо!