JS метод Date.setMonth()


Загальний опис

Date.prototype.setMonth() - це метод об'єкта Date, який дозволяє змінювати місяць конкретного екземпляра дати, при цьому зберігаючи день та час. Основний принцип роботи методу полягає в передачі індексу місяця як першого параметра (де 0 відповідає січню, 1 - лютому, і так далі до 11, що відповідає грудню). Якщо переданий індекс виходить за межі діапазону, дата автоматично коректується. Наприклад, якщо сьогодні січень, і ви встановите місяць з індексом -1, то дата зміниться на грудень попереднього року.

Розглянемо практичний приклад. Уявімо, що у вас є дата "15 лютого 2023 року" і ви хочете змінити місяць на квітень:

let exampleDate = new Date(2023, 1, 15);
exampleDate.setMonth(3);
console.log(exampleDate);

В результаті ви отримаєте "15 квітня 2023 року".

Однак тут важливо зазначити особливість. Якщо день місяця у вихідній даті виходить за межі кількості днів у новому місяці, метод автоматично коректує день. Наприклад, якщо ми взяли б "31 березня 2023 року" і спробували змінити місяць на лютий:

let trickyDate = new Date(2023, 2, 31);
trickyDate.setMonth(1);
console.log(trickyDate);

В результаті отримаємо "3 березня 2023 року", оскільки лютого 31 дня не існує.

Також метод Date.prototype.setMonth() дозволяє передавати другий параметр для встановлення дня місяця. Це може бути корисно, коли ви хочете одночасно змінити місяць і день.

автор: Bond

Нотатка

Важливо пам'ятати, що місяці в Date індексуються, починаючи з 0 (січень) до 11 (грудень). Це може призвести до плутанини, коли ви сподіваєтеся побачити результат для "березня", але в результаті отримуєте "лютий".

Приклад:

let date = new Date(2023, 2); // Маєте на увазі "березень", але передаєте 2 як індекс
console.log(date.getMonth()); // Поверне 2, що відповідає березню
автор: Bond
Нотатка

Коли ви використовуєте Date.prototype.setMonth() і передаєте день, який не існує в цьому місяці (наприклад, 31 квітня), JavaScript автоматично коректує цю дату. Це може призвести до неочікуваних результатів, особливо при роботі з обчисленнями дат.

Приклад:

let trickyDate = new Date(2023, 2, 31);
trickyDate.setMonth(3); // Встановлюємо квітень
console.log(trickyDate); // Поверне "1 травня 2023 року"
автор: Bond
Нотатка

Якщо передати значення місяця, що виходить за рамки 0-11, дата буде автоматично адаптована. Це може виявитися корисним у деяких сценаріях.

Приклад:

let dateOverflow = new Date(2023, 5, 15);
dateOverflow.setMonth(12); // Спроба встановити грудень
console.log(dateOverflow); // Поверне "15 січня 2024 року"
автор: Bond

Синтаксис

setMonth(monthValue)
setMonth(monthValue, dateValue)

Параметри

monthValue

Ціле число, що представляє місяць: 0 для січня, 1 для лютого тощо.

автор: Bond

dateValue

Ціле число від 1 до 31, яке представляє день місяця.

автор: Bond

Повернення

timestamp

Метод змінює об'єкт Date безпосередньо, повертаючи його новий штамп часу (timestamp). Якщо параметр дорівнює NaN (або іншим значенням, які конвертуються в NaN, таким як undefined), дата встановлюється як "Invalid Date", а метод повертає NaN.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
1 1 1 3 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі ми створюємо дату "15 травня 2023 року" із допомогою конструктора Date. Після цього застосовуємо setMonth з аргументом 5 (що відповідає червню) для зміни місяця. Результат - "15 червня 2023 року".

// Створюємо новий об'єкт дати для "15 травня 2023 року"
let currentMonth = new Date(2023, 4, 15);

// Використовуємо setMonth для зміни місяця на червень (індекс 5)
currentMonth.setMonth(5);

// Виведення результату
console.log(currentMonth); // "15 червня 2023 року"
автор: Bond

Цей приклад демонструє використання методу setMonth() для зміни місяця в об'єкті Date. Користувач може обрати місяць зі списку і побачити, як змінюється дата після натискання на кнопку "Змінити місяць".

автор: Bond

У цьому прикладі ми створюємо дату для "1 березня 2023 року". Наступною дією є зміна місяця на наступний (лютий), а потім використання автоматичної корекції дати, встановлюючи день на "0". Це призведе до того, що дата зміниться на останній день попереднього місяця. Оскільки 2023 рік не є високосним, дата автоматично коректується на "28 лютий 2023 року".

// Створюємо дату для "1 березня 2023 року"
let endOfMonth = new Date(2023, 1, 1);

// Використовуємо setMonth для зміни місяця на "лютий" та setDate для встановлення "0 дня"
// це автоматично встановить дату на останній день попереднього місяця (лютий)
endOfMonth.setMonth(2);
endOfMonth.setDate(0);

// Виведення результату
console.log(endOfMonth); // "28 лютий 2023 року"
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід