SetDate: примеры (JAVASCRIPT)

Метод setDate для изменения дней даты в JavaScript
Раздел: Дата и время, Методы
setDate(dayValue: Number): Number (milliseconds)

Основы метода setDate

Метод setDate() принадлежит объекту Date в JavaScript и используется для установки дня месяца указанной даты по местному времени. Метод изменяет существующий объект Date и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC до обновленной даты.

Использование метода обычно требуется при манипуляциях с датами: расчете будущих или прошедших дат, установке конкретного дня месяца или обработке временных интервалов.

Аргументы метода

  • dayValue (обязательный): целое число от 1 до 31, представляющее день месяца. Значения могут выходить за пределы этого диапазона, вызывая автоматическую корректировку месяца и года.

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

Метод возвращает число (timestamp), представляющее количество миллисекунд между 1 января 1970 года 00:00:00 UTC и обновленной датой. Важно отметить, что оригинальный объект Date модифицируется.

Базовые примеры использования

Установка конкретного дня месяца:

const date = new Date('2024-03-15');
date.setDate(10);
console.log(date.toDateString());
Sun Mar 10 2024

Использование значений за пределами диапазона:

const date = new Date('2024-01-31');
date.setDate(32);
console.log(date.toDateString());
Fri Feb 01 2024

Отрицательные значения для подсчета дней с конца предыдущего месяца:

const date = new Date('2024-03-10');
date.setDate(-5);
console.log(date.toDateString());
Sat Feb 24 2024

Альтернативные методы JavaScript

setFullYear(): устанавливает год, месяц и день месяца. Подходит для комплексного изменения даты.

setMonth(): изменяет месяц и опционально день месяца. Удобен при работе с месячными интервалами.

setTime(): устанавливает дату с помощью значения timestamp. Полезен для точных операций с миллисекундами.

Выбор метода зависит от конкретной задачи: setDate оптимален для манипуляций с днями, setFullYear для годовых изменений, setMonth для месячных корректировок.

Распространенные ошибки

Путаница с возвращаемым значением:

const date = new Date('2024-03-15');
const result = date.setDate(10);
console.log(result); // timestamp, а не объект Date
console.log(date.toDateString());
1710028800000
Sun Mar 10 2024

Игнорирование мутации исходного объекта:

const original = new Date('2024-03-15');
const modified = original;
modified.setDate(10);
console.log(original.toDateString());
Sun Mar 10 2024

Неверная обработка выходных дней месяца:

const date = new Date('2024-01-31');
date.setDate(30); // Январь имеет 31 день, поэтому 30 допустимо
console.log(date.toDateString());
Tue Jan 30 2024

Изменения в спецификации

Метод setDate присутствует в JavaScript с первых версий ECMAScript. Существенных изменений в его работе не происходило. Современные браузеры и среды выполнения следуют стандарту ECMAScript 5 и новее, где поведение полностью специфицировано.

Единственное заметное улучшение связано с обработкой временных зон и високосных секунд в движках JavaScript, но это не затрагивает базовый функционал setDate.

Расширенные примеры применения

Вычисление последнего дня месяца:

Пример javascript
function getLastDayOfMonth(year, month) {
    const date = new Date(year, month + 1, 0);
    return date.getDate();
}
console.log(getLastDayOfMonth(2024, 1)); // февраль 2024
29

Добавление нескольких дней к дате:

Пример javascript
function addDays(date, days) {
    const result = new Date(date);
    result.setDate(result.getDate() + days);
    return result;
}
const start = new Date('2024-03-15');
console.log(addDays(start, 7).toDateString());
Fri Mar 22 2024

Циклическая обработка дат в диапазоне:

Пример javascript
const start = new Date('2024-03-01');
const end = new Date('2024-03-05');
const dates = [];

for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
    dates.push(new Date(d).toDateString());
}
console.log(dates);
['Fri Mar 01 2024', 'Sat Mar 02 2024', 'Sun Mar 03 2024', 'Mon Mar 04 2024', 'Tue Mar 05 2024']

Корректировка даты с учетом выходных дней:

Пример javascript
const date = new Date('2024-03-31'); // 31 марта
// Устанавливаем 32-й день (автоматически переходит на апрель)
date.setDate(32);
console.log(date.toDateString());
Mon Apr 01 2024

Работа с историческими датами:

Пример javascript
const date = new Date(1582, 9, 4); // 4 октября 1582
// Переход на григорианский календарь
date.setDate(date.getDate() + 10);
console.log(date.toDateString());
Fri Oct 15 1582

Аналоги в других языках

Python (datetime.replace):

from datetime import datetime
dt = datetime(2024, 3, 15)
dt = dt.replace(day=10)
print(dt)
2024-03-10 00:00:00

PHP (DateTime::setDate):

$date = new DateTime('2024-03-15');
$date->setDate(2024, 3, 10);
echo $date->format('Y-m-d');
2024-03-10

MySQL (DATE_ADD/INTERVAL):

SELECT DATE_ADD('2024-03-15', INTERVAL -5 DAY);
2024-03-10

Основное отличие JavaScript setDate от аналогов в том, что метод изменяет исходный объект, в то время как в Python создается новый объект.

JS setDate function comments

En
SetDate Sets the day of the month for a specified date