setFullYear() изменяет год в объекте Date, меняет существующую дату. При необходимости он может сразу обновить не только год, но и месяц с днём.
Синтаксис
Базовая запись выглядит так:
date.setFullYear(yearValue)
date.setFullYear(yearValue, monthValue)
date.setFullYear(yearValue, monthValue, dateValue)
Где:
date- это объектDateyearValue- новый годmonthValue- необязательный месяц от0до11dateValue- необязательный день месяца
Что возвращает setFullYear()
Метод возвращает timestamp - количество миллисекунд с 1 января 1970 года.
const date = new Date(2025, 0, 15);
const result = date.setFullYear(2030);
console.log(typeof result); // "number"
console.log(result === date.getTime()); // true
console.log(date.getFullYear()); // 2030
Это важно: setFullYear() возвращает число, а не новый объект Date.
Простой пример
const date = new Date(2025, 0, 15);
date.setFullYear(2030);
console.log(date.getFullYear()); // 2030
Здесь:
2025- исходный год0- январь15- день месяца
После вызова метода год становится 2030.
Можно сразу изменить год, месяц и день
У setFullYear() есть дополнительные аргументы.
С их помощью можно за один вызов изменить сразу несколько частей даты.
const date = new Date(2025, 0, 15);
date.setFullYear(2030, 5, 20);
console.log(date.getFullYear()); // 2030
console.log(date.getMonth()); // 5
console.log(date.getDate()); // 20
Здесь:
2030- новый год5- июнь20- день месяца
Важно помнить: месяц здесь тоже начинается с 0.
setFullYear() меняет исходную дату
Это главное отличие от методов вроде getFullYear().
setFullYear() не просто читает значение, а изменяет сам объект Date.
const date = new Date(2025, 0, 15);
date.setFullYear(2030);
console.log(date.getFullYear()); // 2030
Если объект даты используется в нескольких местах, это поведение важно учитывать.
Чем setFullYear() отличается от getFullYear()
Эти методы связаны, но делают разное.
getFullYear()читает годsetFullYear()изменяет год
const date = new Date(2025, 0, 15);
console.log(date.getFullYear()); // 2025
date.setFullYear(2030);
console.log(date.getFullYear()); // 2030
setFullYear() работает по локальному времени
Это важный момент.
Метод setFullYear() изменяет дату с точки зрения локального часового пояса пользователя.
Если нужно менять год именно по UTC, используют setUTCFullYear().
Чем setFullYear() отличается от setUTCFullYear()
Разница такая:
setFullYear()изменяет год по локальному времениsetUTCFullYear()изменяет год поUTC
Во многих случаях результат будет похожим, но при работе с серверным временем и ISO-строками лучше использовать тот метод, который соответствует вашей задаче.
Дата может сдвинуться при смене года
Это полезный нюанс.
Если текущая дата существует в одном году, но не существует в другом, JavaScript автоматически нормализует результат.
const date = new Date(2024, 1, 29);
date.setFullYear(2025);
console.log(date.getFullYear()); // 2025
console.log(date.getMonth()); // 2
console.log(date.getDate()); // 1
Здесь 29 февраля 2024 года превращается в 1 марта 2025 года, потому что в 2025 году такого дня нет.
Invalid Date можно восстановить через setFullYear()
Это поведение встречается не так часто, но оно полезно.
Если объект даты невалидный, setFullYear() с корректным значением может сделать его снова рабочим.
const date = new Date("invalid");
date.setFullYear(2025);
console.log(date.getFullYear()); // 2025
console.log(date.getMonth()); // 0
console.log(date.getDate()); // 1
В таком случае дата восстанавливается как 1 января указанного года.
Невалидное значение делает дату Invalid Date
Если в setFullYear() передать NaN или значение, которое превращается в NaN, результатом будет невалидная дата.
const date = new Date(2025, 0, 15);
console.log(date.setFullYear(NaN)); // NaN
console.log(String(date)); // "Invalid Date"
Это важно помнить, если год приходит из формы, API или пользовательского ввода.
setFullYear() не создаёт новый объект даты
Этот метод не создаёт новую дату рядом со старой.
Он изменяет уже существующий объект Date.
const date = new Date(2025, 0, 15);
const sameDate = date;
date.setFullYear(2030);
console.log(sameDate.getFullYear()); // 2030
Обе переменные указывают на один и тот же объект.
Когда это полезно
setFullYear() особенно удобен, когда:
- нужно изменить год у существующей даты
- вы сдвигаете дату на несколько лет вперёд или назад
- хотите собрать новую дату на основе уже существующей
- нужно одновременно обновить год, месяц и день
Пример:
const expiryDate = new Date(2025, 0, 15);
expiryDate.setFullYear(2026);
console.log(expiryDate.getFullYear()); // 2026
Частые ошибки
Ожидать новый объект Date, а не изменение старого
const date = new Date(2025, 0, 15);
date.setFullYear(2030);
console.log(date.getFullYear()); // 2030
Метод меняет исходный объект.
Ожидать объект Date в результате
const date = new Date(2025, 0, 15);
const result = date.setFullYear(2030);
console.log(typeof result); // "number"
Результат метода - timestamp, а не объект даты.
Забывать, что monthValue начинается с 0
const date = new Date(2025, 0, 15);
date.setFullYear(2030, 0, 1);
console.log(date.getMonth()); // 0
Январь здесь - это 0, а не 1.
Путать setFullYear() и getFullYear()
const date = new Date(2025, 0, 15);
console.log(date.getFullYear()); // 2025
date.setFullYear(2030);
Один метод читает значение, другой его изменяет.
Забывать про локальное время
setFullYear() работает по локальному часовому поясу пользователя.
Если важен именно UTC, лучше смотреть в сторону setUTCFullYear().
Не учитывать сдвиг даты на 29 февраля
const date = new Date(2024, 1, 29);
date.setFullYear(2025);
Дата может автоматически перейти на следующий допустимый день.
Быстрая памятка
setFullYear()вызывается у объектаDate- метод изменяет исходную дату
- результатом является
timestamp - можно передать только год или сразу год, месяц и день
monthValueсчитается от0до11setFullYear()работает по локальному времени- для
UTCестьsetUTCFullYear() - у невалидного аргумента результатом будет
Invalid Date - невалидную дату можно восстановить корректным годом
Коротко
setFullYear() в JavaScript нужен, чтобы изменить год в объекте Date. Главное, что стоит запомнить: метод меняет исходную дату, возвращает timestamp, может сразу принять месяц и день, работает по локальному времени и отличается от getFullYear() тем, что не читает значение, а именно изменяет его.