setTime() изменяет дату целиком через timestamp. Метод меняет существующий объект Date и принимает количество миллисекунд с 1 января 1970 года 00:00:00 UTC.
Синтаксис
Базовая запись выглядит так:
date.setTime(timeValue)
Где:
date- это объектDatetimeValue- новыйtimestampв миллисекундах
У метода только один аргумент.
Что возвращает setTime()
Метод возвращает timestamp - количество миллисекунд с 1 января 1970 года.
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
const result = date.setTime(0);
console.log(typeof result); // "number"
console.log(result === date.getTime()); // true
console.log(date.getTime()); // 0
Это важно: setTime() возвращает число, а не новый объект Date.
Простой пример
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
date.setTime(0);
console.log(date.getTime()); // 0
console.log(date.toISOString()); // "1970-01-01T00:00:00.000Z"
Здесь 0 - это начало отсчёта timestamp.
После вызова метода дата становится равной моменту 1 января 1970 года 00:00:00 UTC.
setTime() задаёт весь момент времени сразу
Это главный нюанс метода.
setTime() не меняет отдельно часы, минуты, секунды или миллисекунды. Он сразу задаёт весь момент времени целиком.
const date = new Date();
const timestamp = Date.UTC(2025, 0, 15, 12, 0, 0);
date.setTime(timestamp);
console.log(date.toISOString()); // "2025-01-15T12:00:00.000Z"
Если потом получать отдельные части даты через локальные методы вроде getHours(), результат уже будет зависеть от часового пояса пользователя.
setTime() меняет исходную дату
Это главное отличие от методов вроде getTime().
setTime() не просто читает значение, а изменяет сам объект Date.
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
date.setTime(0);
console.log(date.getTime()); // 0
Если объект даты используется в нескольких местах, это поведение важно учитывать.
Чем setTime() отличается от getTime()
Эти методы связаны, но делают разное.
getTime()читает текущийtimestampsetTime()изменяетtimestamp
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
console.log(date.getTime()); // текущий timestamp
date.setTime(0);
console.log(date.getTime()); // 0
Чем setTime() отличается от setMilliseconds()
Эти методы легко перепутать, но работают они совсем по-разному.
setTime()задаёт весьtimestampsetMilliseconds()меняет только миллисекунды внутри текущей секунды
const date = new Date(Date.UTC(2025, 0, 15, 12, 0, 0, 400));
date.setMilliseconds(900);
console.log(date.toISOString()); // "2025-01-15T12:00:00.900Z"
date.setTime(0);
console.log(date.toISOString()); // "1970-01-01T00:00:00.000Z"
С setTime() удобно сдвигать дату на нужный интервал
Это один из самых практичных сценариев.
Можно взять текущий timestamp, прибавить нужное количество миллисекунд и записать результат обратно.
const date = new Date("2025-01-15T12:00:00.000Z");
const oneHour = 60 * 60 * 1000;
date.setTime(date.getTime() + oneHour);
console.log(date.toISOString()); // "2025-01-15T13:00:00.000Z"
Так удобно сдвигать дату на часы, дни и любые другие интервалы.
Можно установить дату до 1970 года
timestamp может быть не только положительным, но и отрицательным.
const date = new Date();
date.setTime(-1000);
console.log(date.toISOString()); // "1969-12-31T23:59:59.000Z"
Здесь дата уходит на одну секунду назад от начала отсчёта.
Invalid Date можно восстановить через setTime()
Это полезная особенность метода.
Если объект даты невалидный, setTime() с корректным timestamp может сделать его снова рабочим.
const date = new Date("invalid");
date.setTime(0);
console.log(date.getTime()); // 0
console.log(date.toISOString()); // "1970-01-01T00:00:00.000Z"
Невалидное значение делает дату Invalid Date
Если в setTime() передать NaN или значение, которое превращается в NaN, результатом будет невалидная дата.
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
console.log(date.setTime(NaN)); // NaN
console.log(String(date)); // "Invalid Date"
Это важно помнить, если timestamp приходит из формы, API или пользовательского ввода.
setTime() не создаёт новый объект даты
Этот метод не создаёт новую дату рядом со старой.
Он изменяет уже существующий объект Date.
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
const sameDate = date;
date.setTime(0);
console.log(sameDate.getTime()); // 0
Обе переменные указывают на один и тот же объект.
Когда это полезно
setTime() особенно удобен, когда:
- нужно полностью заменить дату и время у существующего объекта
- вы сдвигаете дату на фиксированный интервал в миллисекундах
- хотите работать с
timestamp, а не с отдельными частями даты - нужно восстановить
Invalid Dateчерез корректныйtimestamp
Пример:
const expiresAt = new Date("2025-01-15T12:00:00.000Z");
const oneDay = 24 * 60 * 60 * 1000;
expiresAt.setTime(expiresAt.getTime() + oneDay);
console.log(expiresAt.toISOString()); // "2025-01-16T12:00:00.000Z"
Частые ошибки
Ожидать новый объект Date, а не изменение старого
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
date.setTime(0);
console.log(date.getTime()); // 0
Метод меняет исходный объект.
Ожидать объект Date в результате
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
const result = date.setTime(0);
console.log(typeof result); // "number"
Результат метода - timestamp, а не объект даты.
Передавать секунды вместо миллисекунд
const secondsTimestamp = 1736942400;
const date = new Date();
date.setTime(secondsTimestamp);
console.log(date.toISOString()); // "1970-01-21T02:29:02.400Z"
Если timestamp у вас в секундах, обычно нужен * 1000.
Путать setTime() и setMilliseconds()
const date = new Date(Date.UTC(2025, 0, 15, 12, 0, 0, 400));
date.setMilliseconds(900);
date.setTime(0);
Один метод меняет только часть времени, другой полностью заменяет момент времени.
Забывать, что setTime() задаёт абсолютный момент времени
const date = new Date();
date.setTime(Date.UTC(2025, 0, 15, 12, 0, 0));
Если потом читать дату через локальные методы, вывод может отличаться в разных часовых поясах.
Не учитывать NaN у невалидного значения
const date = new Date(2025, 0, 15, 10, 20, 30, 400);
console.log(date.setTime(NaN)); // NaN
Если timestamp может быть некорректным, полезно сначала проверить его.
Быстрая памятка
setTime()вызывается у объектаDate- метод изменяет исходную дату
- результатом является
timestamp - метод принимает количество миллисекунд с
1 января 1970 года 00:00:00 UTC - у метода только один аргумент
setTime()задаёт весь момент времени целиком- для чтения текущего
timestampестьgetTime() - у невалидного аргумента результатом будет
Invalid Date Invalid Dateможно восстановить корректнымtimestamp
Коротко
setTime() в JavaScript нужен, чтобы изменить дату целиком через timestamp. Главное, что стоит запомнить: метод меняет исходный объект Date, возвращает число, работает сразу со всем моментом времени, а не с отдельной частью даты, и особенно полезен, когда нужно сдвигать даты на фиксированные интервалы в миллисекундах.