JavaScript метод Date.setDate()

Определение и применение

JavaScript метод setDate() объекта Date устанавливает день месяца для указанной даты по местному времени.

В качестве возвращаемого значения метода setDate() вы получаете количество миллисекунд между 1 января 1970 00:00:00 UTC и заданной датой.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Date.setDate
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
setDate✓1✓12✓1✓3✓1✓18✓4✓10.1✓1✓1.0✓4.4✓1

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
dateObj.setDate(dayValue);

Значения параметров

setDate(): параметры
Параметр Описание
dayValue Целое число, представляющее день месяца. Обязательный параметр.
Ожидаемые значения лежат в диапазоне от 1 до 31, но другие значения возможны, например:
  • значение 0 приведет к последнему дню предыдущего месяца
  • значение -1 приведет ко дню, предшествующему последнему дню предыдущего месяца, значение -10 соответственно приведет к сдвигу назад от последнего дня предыдущего месяца.
Если месяц имеет 30 дней, то значение 31 будет соответствовать первому дню следующего месяца, а значение 35 пятому дню следующего месяца и так далее.

Возвращаемое значение и особенности

Метод изменяет исходный объект и возвращает новую метку времени — число миллисекунд от 1970-01-01T00:00:00.000Z, а не объект Date. Если аргумент преобразуется в NaN (в том числе явно переданный undefined), дата становится недействительной и возвращается NaN. Пропуск обязательного аргумента также приводит к NaN.

Аргументы преобразуются к числам; дробная часть отбрасывается. Бесконечные значения и результат за пределами диапазона Date (±8,64 × 1015 миллисекунд от эпохи) дают Invalid Date.

Значения за пределами обычного диапазона, включая отрицательные, переносятся в соседние компоненты даты.

Если исходный объект содержит Invalid Date, этот метод не восстанавливает его: результат остаётся NaN.

Изменение происходит по местному времени. При переходе на летнее или зимнее время разность меток может отличаться от ожидаемого числа часов. Для сдвига на фиксированное число миллисекунд используйте setTime(). При повторяющемся местном времени выбирается более ранний момент, а несуществующее время сдвигается вперёд на длительность пропуска.

Спецификация

ECMAScript — Date.prototype.setDate(). Метод входит в стандарт начиная с ECMAScript 1.

Примеры, попробуйте сами

setDate() — пример 1

Измените аргументы и нажмите ▶. Каждый вызов в этом примере начинается с исходной даты; сравните изменённые компоненты с комментариями.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
// Каждый вариант начинается с 14 февраля 2019 года, 12:00 по местному времени.
let someDay

someDay = new Date(2019, 1, 14, 12)
someDay.setDate(0)
console.log(someDay.toDateString()) // "Thu Jan 31 2019"

someDay = new Date(2019, 1, 14, 12)
someDay.setDate(10)
console.log(someDay.toDateString()) // "Sun Feb 10 2019"

someDay = new Date(2019, 1, 14, 12)
someDay.setDate(20)
console.log(someDay.toDateString()) // "Wed Feb 20 2019"

someDay = new Date(2019, 1, 14, 12)
someDay.setDate(31)
console.log(someDay.toDateString()) // "Sun Mar 03 2019"

someDay = new Date(2019, 1, 14, 12)
someDay.setDate(-1)
console.log(someDay.toDateString()) // "Wed Jan 30 2019"

someDay = new Date(2019, 1, 14, 12)
someDay.setDate(-10)
console.log(someDay.toDateString()) // "Mon Jan 21 2019"

someDay = new Date(2019, 1, 14, 12)
someDay.setDate(-40)
console.log(someDay.toDateString()) // "Sat Dec 22 2018"

Возвращаемая метка и Invalid Date

Сравните результат метода с getTime(). Явно переданный undefined делает дату недействительной.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
const date = new Date(2019, 1, 14, 12)
const timestamp = date.setDate(20)
console.log(typeof timestamp) // "number"
console.log(timestamp === date.getTime()) // true

console.log(date.setDate(undefined)) // NaN
console.log(Number.isNaN(date.getTime())) // true