#javascript #date
Вопрос:
Я хочу увеличивать и уменьшать дни в дате, не меняя другие части даты. Например, когда у меня есть:
- 31 декабря 2021 года -> добавить один день ->> 01 декабря 2021 года, >>или
- 01 Декабря 2021 года -> вычтите один день ->> 31 декабря 2021 года
Ниже приведен мой код дня увеличения. Это прекрасно работает, и я получаю то, что хочу:
let cur_date = new Date();
setInterval(() => {
let curMonth = cur_date.getMonth();
cur_date.setDate(cur_date.getDate() 1);
if (cur_date.getMonth() !== curMonth) {
cur_date.setMonth(curMonth);
}
console.log(cur_date.toLocaleString());
}, 1000);
Мой код дня уменьшения не работает, и я получаю 31 December 2021
после 01 November 2021
:
let cur_date = new Date();
setInterval(() => {
let curMonth = cur_date.getMonth();
cur_date.setDate(cur_date.getDate() - 1);
if (cur_date.getMonth() !== curMonth) {
cur_date.setMonth(curMonth);
}
console.log(cur_date.toLocaleString());
}, 1000);
Как это исправить?
Комментарии:
1. Это потому, что в ноябре нет 31 дня, как в октябре.
Ответ №1:
Это происходит потому, что в ноябре нет 31 дня, и поэтому, когда вы возвращаетесь на один день назад с 1 ноября, вы получаете 31 октября. Затем вы меняете месяц так, чтобы это было 31 ноября, но JavaScript интерпретирует это как 30 ноября 1 день = 1 декабря.
Чтобы избежать этого, выполните проверку перед вычитанием одного дня: если дата равна 1, то сначала добавьте месяц, а затем позвольте вычесть 1 день:
let cur_date = new Date();
setInterval(() => {
let curMonth = cur_date.getMonth();
if (cur_date.getDate() === 1) { // Do the check here, before subtracting 1 day
cur_date.setMonth(curMonth 1); // Go temporary to next month
}
cur_date.setDate(cur_date.getDate() - 1);
console.log(cur_date.toLocaleString());
}, 1000);
Комментарии:
1. Спасибо, это было очень полезно для меня.
2. Вам нужно будет сделать эту проверку в цикле за 1 февраля -> 31 января ->> 3 марта
3. Почти забыл о маркировке)) Спасибо.
4. @phuzi, нет, в цикле нет необходимости. Ты проверял? Это решение не действует с 1 февраля по 31 января. Пожалуйста, прочтите еще раз.
5. Достаточно справедливо, как и ваше решение лучше 👍 🏻