Learn JavaScript

setTime() - изменение timestamp у даты в JavaScript

setTime() изменяет дату целиком через timestamp. Метод меняет существующий объект Date и принимает количество миллисекунд с 1 января 1970 года 00:00:00 UTC.

Синтаксис

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

date.setTime(timeValue)

Где:

  • date - это объект Date
  • timeValue - новый 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() читает текущий timestamp
  • setTime() изменяет 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() задаёт весь timestamp
  • setMilliseconds() меняет только миллисекунды внутри текущей секунды
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, возвращает число, работает сразу со всем моментом времени, а не с отдельной частью даты, и особенно полезен, когда нужно сдвигать даты на фиксированные интервалы в миллисекундах.