#javascript #momentjs
Вопрос:
Я хотел бы добавить дни к определенной дате и отформатировать вывод. Итак, у меня есть следующее:
addDays(date){
return moment(date).add(365, 'd').format("DD/MM/YYYY");
}
Я протестировал вышесказанное следующим образом
console.log(addDays("24/05/2021")) //this returns invalid date
console.log(addDays("05/06/2021")) //returns 06/05/2022
В первой дате он возвращается invalid date
, а во второй я ожидал, что он вернется 05/06/2022
, но он возвращает неправильную дату.
Чего мне не хватает, чтобы это работало. Мои даты указаны в формате dd/mm/yyyy
Комментарии:
1. ваша дата, которую вы передаете, шаткая, см. Документы
2. В зависимости от того, что вы ожидаете от добавления 365 дней, ваш результат может составлять один день в високосные годы. Т.Е. добавление 365 дней к 2021-01-01 будет 2022-01-01. Но добавление 365 дней к 2020-01-01 будет 2020-12-31
Ответ №1:
Сбой происходит из-за momentjs
невозможности проанализировать эту дату.
Вам нужно будет указать формат, который вы передаете:
moment(inputDate, 'DD/MM/YYYY')
Документация MomentJS String Format
Пожалуйста, смотрите Ниже пример, который будет ожидаемым результатом:
function addDays(inputDate){
return moment(inputDate, 'DD/MM/YYYY').add(365, 'd').format("DD/MM/YYYY");
}
console.log(addDays("24/05/2021"));
console.log(addDays("05/06/2021"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
24/05/2022
05/06/2022
Тем не менее, я бы все же рекомендовал использовать moment().add(1, 'year')
:
function addDays(inputDate){
return moment(inputDate, 'DD/MM/YYYY').add(1, 'year').format("DD/MM/YYYY");
}
function addDays(inputDate){
return moment(inputDate, 'DD/MM/YYYY').add(1, 'year').format("DD/MM/YYYY");
}
console.log(addDays("24/05/2021"));
console.log(addDays("05/06/2021"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
Комментарии:
1. Спасибо, это работает.
Ответ №2:
Так ли это? Если вы действительно хотите добавить год .add(1, 'year')
, а не 365 дней.
Ответ №3:
Вы могли бы сделать это двумя способами: используя day
и year
let addNYears = function(years = 1, date) {
return moment(date, 'DD/MM/YYYY').add(years, 'year').format("DD/MM/YYYY");
}
let addNDays = function(days = 1, date) {
return moment(date, 'DD/MM/YYYY').add(days, 'day').format("DD/MM/YYYY");
}
console.log(addNYears(1, new Date())); // 1 year
// this is not the best way as each 4 years we have a leap year.
console.log(addNDays(365, new Date())); // 365 days
console.log(addNDays(5, new Date())); // 5 days
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8 M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>