Learn JavaScript

setUTCSeconds() - изменение секунд по UTC в JavaScript

setUTCSeconds() изменяет секунды в объекте Date по UTC, меняет существующую дату. При необходимости этот метод может сразу обновить не только секунды, но и миллисекунды.

Синтаксис

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

date.setUTCSeconds(secondsValue)
date.setUTCSeconds(secondsValue, msValue)

Где:

  • date - это объект Date
  • secondsValue - новые секунды по UTC
  • msValue - необязательные миллисекунды

Что возвращает setUTCSeconds()

Метод возвращает timestamp - количество миллисекунд с 1 января 1970 года.

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30, 400));
const result = date.setUTCSeconds(45);

console.log(typeof result); // "number"
console.log(result === date.getTime()); // true
console.log(date.toISOString()); // "2025-01-15T10:20:45.400Z"

Это важно: setUTCSeconds() возвращает число, а не новый объект Date.

Простой пример

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));

date.setUTCSeconds(45);

console.log(date.getUTCSeconds()); // 45
console.log(date.toISOString()); // "2025-01-15T10:20:45.000Z"

Здесь:

  • 2025 - год
  • 0 - январь
  • 15 - день месяца
  • 10 - часы
  • 20 - минуты
  • 30 - исходные секунды

После вызова метода секунды по UTC становятся 45.

Обычно используют значения от 0 до 59

В большинстве случаев в setUTCSeconds() передают обычные секунды внутри минуты:

  • 0 - начало новой минуты
  • 30 - середина минуты
  • 59 - последняя секунда перед следующей минутой
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));

date.setUTCSeconds(0);

console.log(date.getUTCSeconds()); // 0

Но у setUTCSeconds() есть полезная особенность: он умеет работать и со значениями вне этого диапазона.

Можно сразу изменить секунды и миллисекунды

У setUTCSeconds() есть дополнительный аргумент.

С его помощью можно за один вызов изменить сразу две части времени по UTC.

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30, 400));

date.setUTCSeconds(45, 900);

console.log(date.getUTCSeconds()); // 45
console.log(date.getUTCMilliseconds()); // 900
console.log(date.toISOString()); // "2025-01-15T10:20:45.900Z"

Если второй аргумент не передавать, текущие миллисекунды сохраняются.

setUTCSeconds() меняет исходную дату

Это главное отличие от методов вроде getUTCSeconds().

setUTCSeconds() не просто читает значение, а изменяет сам объект Date.

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));

date.setUTCSeconds(45);

console.log(date.getUTCSeconds()); // 45

Если объект даты используется в нескольких местах, это поведение важно учитывать.

Чем setUTCSeconds() отличается от getUTCSeconds()

Эти методы связаны, но делают разное.

  • getUTCSeconds() читает секунды по UTC
  • setUTCSeconds() изменяет секунды по UTC
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));

console.log(date.getUTCSeconds()); // 30

date.setUTCSeconds(45);

console.log(date.getUTCSeconds()); // 45

setUTCSeconds() работает именно по UTC

Это главный момент.

Метод setUTCSeconds() изменяет дату с точки зрения UTC, а не локального часового пояса пользователя.

Если вы работаете с серверным временем, ISO-строками и данными из API, это поведение обычно удобнее и предсказуемее.

Чем setUTCSeconds() отличается от setSeconds()

Разница такая:

  • setUTCSeconds() изменяет секунды по UTC
  • setSeconds() изменяет секунды по локальному времени

Здесь есть важный нюанс: на практике результат часто совпадает, потому что секунды обычно не зависят от часового пояса так заметно, как дата, часы или минуты. Но логически это всё равно разные системы времени.

const date = new Date("2025-01-15T14:30:45+03:00");

date.setUTCSeconds(0);

console.log(date.toISOString()); // "2025-01-15T11:30:00.000Z"

Если в задаче важен именно UTC, лучше использовать setUTCSeconds(), даже если в простых примерах локальная версия даёт такой же результат.

Секунды могут выходить за пределы 0..59

Это одна из полезных особенностей Date.

Если передать значение больше 59, JavaScript автоматически перенесёт время на следующую минуту.

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 59, 0));

date.setUTCSeconds(60);

console.log(date.getUTCFullYear()); // 2025
console.log(date.getUTCMonth()); // 0
console.log(date.getUTCDate()); // 15
console.log(date.getUTCHours()); // 10
console.log(date.getUTCMinutes()); // 21
console.log(date.getUTCSeconds()); // 0
console.log(date.toISOString()); // "2025-01-15T10:21:00.000Z"

Здесь 60 означает переход на начало следующей минуты по UTC.

Можно перейти и на предыдущий день

Если передать отрицательное значение, JavaScript сдвинет дату назад.

const date = new Date(Date.UTC(2025, 0, 15, 0, 0, 10, 0));

date.setUTCSeconds(-1);

console.log(date.getUTCFullYear()); // 2025
console.log(date.getUTCMonth()); // 0
console.log(date.getUTCDate()); // 14
console.log(date.getUTCHours()); // 23
console.log(date.getUTCMinutes()); // 59
console.log(date.getUTCSeconds()); // 59
console.log(date.toISOString()); // "2025-01-14T23:59:59.000Z"

Здесь время переходит на предыдущий день по UTC.

setUTCSeconds() не меняет миллисекунды сам по себе

Это полезно помнить.

Если передать только первый аргумент, метод меняет только секунды, а миллисекунды оставляет как есть.

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30, 400));

date.setUTCSeconds(45);

console.log(date.getUTCSeconds()); // 45
console.log(date.getUTCMilliseconds()); // 400

Invalid Date не восстанавливается через setUTCSeconds()

Если объект уже невалидный, setUTCSeconds() не сможет сделать его рабочим снова.

const date = new Date("invalid");

console.log(date.setUTCSeconds(10)); // NaN
console.log(String(date)); // "Invalid Date"

Невалидное значение делает дату Invalid Date

Если в setUTCSeconds() передать NaN или значение, которое превращается в NaN, результатом будет невалидная дата.

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));

console.log(date.setUTCSeconds(NaN)); // NaN
console.log(String(date)); // "Invalid Date"

Это важно помнить, если секунды приходят из формы, API или пользовательского ввода.

setUTCSeconds() не создаёт новый объект даты

Этот метод не создаёт новую дату рядом со старой.

Он изменяет уже существующий объект Date.

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
const sameDate = date;

date.setUTCSeconds(45);

console.log(sameDate.getUTCSeconds()); // 45

Обе переменные указывают на один и тот же объект.

Когда это полезно

setUTCSeconds() особенно удобен, когда:

  • дата хранится в UTC
  • вы работаете с серверным временем
  • нужно одинаковое поведение независимо от часового пояса пользователя
  • хотите сразу обновить секунды и миллисекунды по UTC

Пример:

const timer = new Date("2025-01-15T10:20:30Z");

timer.setUTCSeconds(0);

console.log(timer.toISOString()); // "2025-01-15T10:20:00.000Z"

Частые ошибки

Ожидать новый объект Date, а не изменение старого

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));

date.setUTCSeconds(45);

console.log(date.getUTCSeconds()); // 45

Метод меняет исходный объект.

Ожидать объект Date в результате

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
const result = date.setUTCSeconds(45);

console.log(typeof result); // "number"

Результат метода - timestamp, а не объект даты.

Забывать, что можно передать миллисекунды вторым аргументом

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30, 400));

date.setUTCSeconds(45, 900);

setUTCSeconds() умеет менять не только секунды, но и миллисекунды.

Думать, что значение больше 59 вызовет ошибку

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 59, 0));

date.setUTCSeconds(60);

Ошибка не появится. JavaScript просто перенесёт время на следующую минуту.

Забывать про переход на предыдущий день

const date = new Date(Date.UTC(2025, 0, 15, 0, 0, 10, 0));

date.setUTCSeconds(-1);

Отрицательное значение может перенести время назад.

Путать setUTCSeconds() и getUTCSeconds()

const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));

console.log(date.getUTCSeconds()); // 30
date.setUTCSeconds(45);

Один метод читает значение, другой его изменяет.

Путать setUTCSeconds() и setSeconds()

setUTCSeconds() работает по UTC, а setSeconds() - по локальному часовому поясу пользователя.

Если важен именно UTC, лучше использовать setUTCSeconds().

Быстрая памятка

  • setUTCSeconds() вызывается у объекта Date
  • метод изменяет исходную дату
  • результатом является timestamp
  • можно передать только секунды или сразу секунды и миллисекунды
  • обычно секунды идут от 0 до 59
  • значения меньше 0 и больше 59 нормализуются автоматически
  • setUTCSeconds() работает по UTC
  • для локального времени есть setSeconds()
  • у невалидного аргумента результатом будет Invalid Date
  • Invalid Date через setUTCSeconds() не восстанавливается

Коротко

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