SetUTCMilliseconds: примеры (JAVASCRIPT)

Работа с миллисекундами UTC: метод setUTCMilliseconds
Раздел: Дата и время, UTC методы
setUTCMilliseconds(millisecondsValue: number): number

Метод setUTCMilliseconds() является частью объекта Date в JavaScript. Он устанавливает миллисекунды для указанной даты по всемирному координированному времени (UTC).

Основные сведения о функции

Функция применяется, когда требуется точно установить или изменить компонент миллисекунд даты, представленной в UTC. Это полезно для временных вычислений, не зависящих от локального часового пояса пользователя.

Синтаксис: dateObj.setUTCMilliseconds(millisecondsValue)

Параметры:

  • millisecondsValue (Число): Целое число от 0 до 999, представляющее миллисекунды. Однако допускаются значения за пределами этого диапазона. Например, -1 установит последнюю миллисекунду предыдущей секунды (т.е. 999 миллисекунд), а 1000 увеличит секундную компоненту на 1 и установит миллисекунды в 0.

Возвращаемое значение:

  • Метод возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC по обновленному времени (timestamp). При этом сам объект Date изменяется.

Простые примеры использования

Установка конкретных миллисекунд.

const date = new Date('2023-01-01T00:00:00.000Z');
date.setUTCMilliseconds(123);
console.log(date.toISOString());
2023-01-01T00:00:00.123Z

Использование значения больше 999. Это приводит к увеличению секунд.

const date = new Date('2023-01-01T00:00:00.000Z');
date.setUTCMilliseconds(1500);
console.log(date.toISOString());
2023-01-01T00:00:01.500Z

Использование отрицательного значения. Это уменьшает секундную компоненту.

const date = new Date('2023-01-01T00:00:00.500Z');
date.setUTCMilliseconds(-200);
console.log(date.toISOString());
2022-12-31T23:59:59.800Z

Похожие функции в JavaScript

  • setMilliseconds() - Устанавливает миллисекунды для даты, но использует локальное время системы. Предпочтительнее использовать setUTCMilliseconds для согласованных операций с серверным временем или между разными часовыми поясами.
  • setUTCSeconds() - Устанавливает секунды и, опционально, миллисекунды по UTC. Если нужно изменить и секунды, удобнее использовать эту функцию, передав миллисекунды вторым аргументом.
  • getUTCMilliseconds() - Парный метод для получения миллисекунд из даты по UTC.

Типичные ошибки

Передача нечислового аргумента приводит к неявному преобразованию, что может дать неожиданный результат или NaN.

const date = new Date();
console.log(date.setUTCMilliseconds('abc')); // Возвращает NaN
console.log(date.toString()); // Дата становится Invalid Date
NaN
Invalid Date

Ошибки в логике при работе с датами, например, неправильный учет того, что метод изменяет исходный объект.

const startDate = new Date('2023-01-01T00:00:00.000Z');
const endDate = startDate; // Это ссылка на тот же объект!
endDate.setUTCMilliseconds(500);
console.log(startDate.toISOString()); // Исходная дата тоже изменилась
2023-01-01T00:00:00.500Z

История изменений

Метод setUTCMilliseconds() был стандартизирован в ECMAScript 1 (1997 год). С тех пор его спецификация не претерпевала существенных изменений. В последних версиях ECMAScript (ES6 и далее) поведение функции остается стабильным и обратно совместимым.

Расширенные примеры применения

Обнуление миллисекундной компоненты для точного сравнения или округления времени до секунды.

Пример javascript
function floorToSecondUTC(date) {
    const newDate = new Date(date);
    newDate.setUTCMilliseconds(0);
    return newDate;
}
const now = new Date('2023-06-15T12:34:56.789Z');
console.log(floorToSecondUTC(now).toISOString());
2023-06-15T12:34:56.000Z

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

Пример javascript
function setPreciseUTCTime(year, month, day, hour, min, sec, ms) {
    const date = new Date();
    date.setUTCFullYear(year, month, day);
    date.setUTCHours(hour, min, sec, ms); // Установка часов, минут, секунд и миллисекунд
    // Альтернативный вариант через setUTCMilliseconds:
    // date.setUTCHours(hour, min, sec);
    // date.setUTCMilliseconds(ms);
    return date;
}
console.log(setPreciseUTCTime(2023, 5, 15, 14, 30, 45, 123).toISOString());
2023-06-15T14:30:45.123Z

Использование в цикле для создания временных меток с заданным интервалом в миллисекундах.

Пример javascript
const baseTime = new Date('2023-01-01T00:00:00.000Z');
const timestamps = [];
for(let i = 0; i < 5; i++) {
    const newTime = new Date(baseTime);
    newTime.setUTCMilliseconds(i * 200); // Увеличиваем на 200 мс каждый шаг
    timestamps.push(newTime.toISOString());
}
console.log(timestamps);
[
  "2023-01-01T00:00:00.000Z",
  "2023-01-01T00:00:00.200Z",
  "2023-01-01T00:00:00.400Z",
  "2023-01-01T00:00:00.600Z",
  "2023-01-01T00:00:00.800Z"
]

Аналоги функции в других языках

Python (datetime): Объект datetime является неизменяемым. Для установки миллисекунд создается новый объект с методом replace().

from datetime import datetime
dt = datetime(2023, 1, 1, 0, 0, 0, 0)
new_dt = dt.replace(microsecond=123000) # Задание микросекунд
print(new_dt.isoformat())
2023-01-01T00:00:00.123000

PHP: Класс DateTime имеет метод setTime(), который может устанавливать микросекунды.

$date = new DateTime('2023-01-01T00:00:00.000Z');
$date->setTime($date->format('H'), $date->format('i'), $date->format('s'), 123);
echo $date->format('Y-m-d\TH:i:s.v\Z');
2023-01-01T00:00:00.123Z

MySQL: Функция DATE_ADD() или арифметические операции могут добавлять интервалы времени, включая миллисекунды.

SELECT '2023-01-01 00:00:00.000' + INTERVAL 123 MILLISECOND;
2023-01-01 00:00:00.123

C (стандартная библиотека): Работа с временем структуры struct tm не поддерживает миллисекунды напрямую. Обычно их хранят отдельно или используют системные функции, такие как gettimeofday().

JS setUTCMilliseconds function comments

En
SetUTCMilliseconds Sets the milliseconds for a specified date according to universal time