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.
Расширенные примеры применения
Вычисление последнего дня месяца:
function getLastDayOfMonth(year, month) {
const date = new Date(year, month + 1, 0);
return date.getDate();
}
console.log(getLastDayOfMonth(2024, 1)); // февраль 202429
Добавление нескольких дней к дате:
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
Циклическая обработка дат в диапазоне:
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']
Корректировка даты с учетом выходных дней:
const date = new Date('2024-03-31'); // 31 марта
// Устанавливаем 32-й день (автоматически переходит на апрель)
date.setDate(32);
console.log(date.toDateString());Mon Apr 01 2024
Работа с историческими датами:
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 создается новый объект.