Learn JavaScript

setFullYear() - изменение года в дате в JavaScript

setFullYear() изменяет год в объекте Date, меняет существующую дату. При необходимости он может сразу обновить не только год, но и месяц с днём.

Синтаксис

Базовая запись выглядит так:

date.setFullYear(yearValue)
date.setFullYear(yearValue, monthValue)
date.setFullYear(yearValue, monthValue, dateValue)

Где:

  • date - это объект Date
  • yearValue - новый год
  • monthValue - необязательный месяц от 0 до 11
  • dateValue - необязательный день месяца

Что возвращает 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 до 11
  • setFullYear() работает по локальному времени
  • для UTC есть setUTCFullYear()
  • у невалидного аргумента результатом будет Invalid Date
  • невалидную дату можно восстановить корректным годом

Коротко

setFullYear() в JavaScript нужен, чтобы изменить год в объекте Date. Главное, что стоит запомнить: метод меняет исходную дату, возвращает timestamp, может сразу принять месяц и день, работает по локальному времени и отличается от getFullYear() тем, что не читает значение, а именно изменяет его.