Как на JS правильно конвертировать миллисекунды в формат 00:00:00,000?

На компе стоит время в моем часовом поясе в миллисекундах 1679287353711 , (что равно 04:42:33,711 это я в экселе посчитал вот так: =(1679287353711/86400000)+ДАТА(1970;1;1)

Выполняю JS код чтоб преобразовать это время в формат и сохранить в переменную TIME_FORMAT в таком виде: 00:00:00,000

Но выдаёт: 02:42:33,711 вместо 04:42:33,711
Как правильно исправить ошибку без подгона ответа юзая вот это: hours + 2 ?

JS Код:

var TIME = 1679287353711;
var date = new Date(TIME);
var hours = date.getUTCHours() + (date.getTimezoneOffset() / 60);
if (hours < 10) {
  hours = '0' + hours;
}
var minutes = date.getUTCMinutes();
if (minutes < 10) {
  minutes = '0' + minutes;
}
var seconds = date.getUTCSeconds();
if (seconds < 10) {
  seconds = '0' + seconds;
}
var milliseconds = date.getUTCMilliseconds();
if (milliseconds < 10) {
  milliseconds = '00' + milliseconds;
} else if (milliseconds < 100) {
  milliseconds = '0' + milliseconds;
}
TIME_FORMAT = hours + ':' + minutes + ':' + seconds + ',' + milliseconds;

console.log(TIME_FORMAT);
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
JS в браузере считает даты в часовом поясе браузера.
timestamp в миллисекундах однозначно задаёт момент времени в зоне UTC.
В это момент, например, в Москве на 3 часа больше. Поэтому браузер покажет
Mon Mar 20 2023 07:42:33 GMT+0300 (Moscow Standard Time)


Excel, видимо, предпочитает UTC, поэтому у него получилось 04:42

Раз хочется получить именно в UTC, можно так:
(new Date(1679287353711))
  .toISOString() // "2023-03-20T04:42:33.711Z"
  .substring(11, 23) // "04:42:33.711"
;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы