setUTCHours() изменяет часы в объекте Date по UTC, меняет существующую дату. При необходимости этот метод может сразу обновить не только часы, но и минуты, секунды и миллисекунды.
Синтаксис
Базовая запись выглядит так:
date.setUTCHours(hoursValue)
date.setUTCHours(hoursValue, minutesValue)
date.setUTCHours(hoursValue, minutesValue, secondsValue)
date.setUTCHours(hoursValue, minutesValue, secondsValue, msValue)
Где:
date- это объектDatehoursValue- новые часы поUTCminutesValue- необязательные минутыsecondsValue- необязательные секундыmsValue- необязательные миллисекунды
Что возвращает setUTCHours()
Метод возвращает timestamp - количество миллисекунд с 1 января 1970 года.
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30, 400));
const result = date.setUTCHours(14);
console.log(typeof result); // "number"
console.log(result === date.getTime()); // true
console.log(date.toISOString()); // "2025-01-15T14:20:30.400Z"
Это важно: setUTCHours() возвращает число, а не новый объект Date.
Простой пример
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
date.setUTCHours(14);
console.log(date.getUTCHours()); // 14
console.log(date.toISOString()); // "2025-01-15T14:20:30.000Z"
Здесь:
2025- год0- январь15- день месяца10- исходные часы20- минуты
После вызова метода час по UTC становится 14.
Обычно используют значения от 0 до 23
В большинстве случаев в setUTCHours() передают обычный час суток:
0- полночь12- полдень23- последний час перед следующими сутками
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
date.setUTCHours(0);
console.log(date.getUTCHours()); // 0
Но у setUTCHours() есть полезная особенность: он умеет работать и со значениями вне этого диапазона.
Можно сразу изменить часы, минуты, секунды и миллисекунды
У setUTCHours() есть дополнительные аргументы.
С их помощью можно за один вызов изменить сразу несколько частей времени по UTC.
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30, 400));
date.setUTCHours(14, 45, 50, 900);
console.log(date.getUTCHours()); // 14
console.log(date.getUTCMinutes()); // 45
console.log(date.getUTCSeconds()); // 50
console.log(date.getUTCMilliseconds()); // 900
console.log(date.toISOString()); // "2025-01-15T14:45:50.900Z"
Если дополнительные аргументы не передавать, текущие минуты, секунды и миллисекунды сохраняются.
setUTCHours() меняет исходную дату
Это главное отличие от методов вроде getUTCHours().
setUTCHours() не просто читает значение, а изменяет сам объект Date.
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
date.setUTCHours(14);
console.log(date.getUTCHours()); // 14
Если объект даты используется в нескольких местах, это поведение важно учитывать.
Чем setUTCHours() отличается от getUTCHours()
Эти методы связаны, но делают разное.
getUTCHours()читает часы поUTCsetUTCHours()изменяет часы поUTC
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
console.log(date.getUTCHours()); // 10
date.setUTCHours(14);
console.log(date.getUTCHours()); // 14
setUTCHours() работает именно по UTC
Это главный момент.
Метод setUTCHours() изменяет дату с точки зрения UTC, а не локального часового пояса пользователя.
Если вы работаете с серверным временем, ISO-строками и данными из API, это поведение обычно удобнее и предсказуемее.
Чем setUTCHours() отличается от setHours()
Разница такая:
setUTCHours()изменяет часы поUTCsetHours()изменяет часы по локальному времени
Это особенно важно возле границы суток.
const utcDate = new Date("2025-01-15T00:00:00+03:00");
const localDate = new Date("2025-01-15T00:00:00+03:00");
utcDate.setUTCHours(0);
localDate.setHours(0);
console.log(utcDate.toISOString()); // "2025-01-14T00:00:00.000Z"
console.log(localDate.toISOString()); // "2025-01-14T21:00:00.000Z"
У этих двух методов похожие названия, но они меняют время в разных системах отсчёта.
Часы могут выходить за пределы 0..23
Это одна из полезных особенностей Date.
Если передать значение больше 23, JavaScript автоматически перенесёт дату на следующие сутки.
const date = new Date(Date.UTC(2025, 0, 15, 23, 0, 0));
date.setUTCHours(24);
console.log(date.getUTCFullYear()); // 2025
console.log(date.getUTCMonth()); // 0
console.log(date.getUTCDate()); // 16
console.log(date.getUTCHours()); // 0
console.log(date.toISOString()); // "2025-01-16T00:00:00.000Z"
Здесь 24 означает переход на 00:00 следующих суток по UTC.
Можно перейти и на предыдущий день
Если передать отрицательное значение, JavaScript сдвинет дату назад.
const date = new Date(Date.UTC(2025, 0, 15, 10, 0, 0));
date.setUTCHours(-1);
console.log(date.getUTCFullYear()); // 2025
console.log(date.getUTCMonth()); // 0
console.log(date.getUTCDate()); // 14
console.log(date.getUTCHours()); // 23
console.log(date.toISOString()); // "2025-01-14T23:00:00.000Z"
Здесь дата переходит на предыдущий день по UTC.
setUTCHours() не меняет минуты сам по себе
Это полезно помнить.
Если передать только первый аргумент, метод меняет только часы, а минуты, секунды и миллисекунды оставляет как есть.
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30, 400));
date.setUTCHours(14);
console.log(date.getUTCHours()); // 14
console.log(date.getUTCMinutes()); // 20
console.log(date.getUTCSeconds()); // 30
console.log(date.getUTCMilliseconds()); // 400
Invalid Date не восстанавливается через setUTCHours()
Если объект уже невалидный, setUTCHours() не сможет сделать его рабочим снова.
const date = new Date("invalid");
console.log(date.setUTCHours(10)); // NaN
console.log(String(date)); // "Invalid Date"
Невалидное значение делает дату Invalid Date
Если в setUTCHours() передать NaN или значение, которое превращается в NaN, результатом будет невалидная дата.
const date = new Date(Date.UTC(2025, 0, 15, 10, 0, 0));
console.log(date.setUTCHours(NaN)); // NaN
console.log(String(date)); // "Invalid Date"
Это важно помнить, если часы приходят из формы, API или пользовательского ввода.
setUTCHours() не создаёт новый объект даты
Этот метод не создаёт новую дату рядом со старой.
Он изменяет уже существующий объект Date.
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
const sameDate = date;
date.setUTCHours(14);
console.log(sameDate.getUTCHours()); // 14
Обе переменные указывают на один и тот же объект.
Когда это полезно
setUTCHours() особенно удобен, когда:
- дата хранится в
UTC - вы работаете с серверным временем
- нужно одинаковое поведение независимо от часового пояса пользователя
- хотите сразу обновить часы, минуты, секунды и миллисекунды по
UTC
Пример:
const meeting = new Date("2025-01-15T10:20:30Z");
meeting.setUTCHours(18);
console.log(meeting.toISOString()); // "2025-01-15T18:20:30.000Z"
Частые ошибки
Ожидать новый объект Date, а не изменение старого
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
date.setUTCHours(14);
console.log(date.getUTCHours()); // 14
Метод меняет исходный объект.
Ожидать объект Date в результате
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
const result = date.setUTCHours(14);
console.log(typeof result); // "number"
Результат метода - timestamp, а не объект даты.
Забывать, что можно передать дополнительные аргументы
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30, 400));
date.setUTCHours(14, 45, 50, 900);
setUTCHours() умеет менять не только часы, но и остальные части времени.
Думать, что значение больше 23 вызовет ошибку
const date = new Date(Date.UTC(2025, 0, 15, 23, 0, 0));
date.setUTCHours(24);
Ошибка не появится. JavaScript просто перенесёт дату на следующие сутки.
Забывать про переход на предыдущий день
const date = new Date(Date.UTC(2025, 0, 15, 10, 0, 0));
date.setUTCHours(-1);
Отрицательное значение может перенести дату назад.
Путать setUTCHours() и getUTCHours()
const date = new Date(Date.UTC(2025, 0, 15, 10, 20, 30));
console.log(date.getUTCHours()); // 10
date.setUTCHours(14);
Один метод читает значение, другой его изменяет.
Путать setUTCHours() и setHours()
setUTCHours() работает по UTC, а setHours() - по локальному часовому поясу пользователя.
Если важен именно UTC, лучше использовать setUTCHours().
Быстрая памятка
setUTCHours()вызывается у объектаDate- метод изменяет исходную дату
- результатом является
timestamp - можно передать только часы или сразу часы, минуты, секунды и миллисекунды
- обычно часы идут от
0до23 - значения меньше
0и больше23нормализуются автоматически setUTCHours()работает поUTC- для локального времени есть
setHours() - у невалидного аргумента результатом будет
Invalid Date Invalid DateчерезsetUTCHours()не восстанавливается
Коротко
setUTCHours() в JavaScript нужен, чтобы изменить часы в объекте Date по UTC. Главное, что стоит запомнить: метод меняет исходную дату, возвращает timestamp, может сразу принять минуты, секунды и миллисекунды, работает по UTC и умеет автоматически переходить на другие сутки, если значение выходит за пределы обычного диапазона.