Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2023, 14:41
Кандидат Javascript-наук
Отправить личное сообщение для mik888em Посмотреть профиль Найти все сообщения от mik888em
 
Регистрация: 21.06.2020
Сообщений: 145

Как на 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);
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2023, 15:34
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Зачем вы берете всё в UTC, если всё равно всё приводите часовому поясу клиента?
Используйте сразу методы getHours, getMinutes, getSeconds и getMilliseconds, они возвращают время в соответствии с часовым поясом клиента.
Ответить с цитированием
  #3 (permalink)  
Старый 20.03.2023, 15:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

format date DateTimeFormat
mik888em,
DateTimeFormat
let TIME = 1679287353711;
        let date = new Date(TIME);
        let minutes = date.getMinutes() + date.getTimezoneOffset();
        date.setMinutes(minutes);
        let milliseconds = date.getMilliseconds().toString().padStart(3, "0");
        let formatter = new Intl.DateTimeFormat("ru", {
            hour: "2-digit",
            minute: "2-digit",
            second: "2-digit"
        });
        let TIME_FORMAT = formatter.format(date) + ',' + milliseconds

        alert(TIME_FORMAT);//04:42:33,711

Последний раз редактировалось рони, 20.03.2023 в 16:03.
Ответить с цитированием
  #4 (permalink)  
Старый 20.03.2023, 15:51
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

рони,
Сообщение от рони
let minutes = date.getMinutes() + date.getTimezoneOffset();
Зачем это?
Как я понял, автор хочет получить время своей локали, а не в UTC.
Ответить с цитированием
  #5 (permalink)  
Старый 20.03.2023, 15:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Nexus
Зачем это?
у меня без этого нет нужного результата, возможно я что-то упускаю и есть способ проще.

Последний раз редактировалось рони, 20.03.2023 в 16:03.
Ответить с цитированием
  #6 (permalink)  
Старый 20.03.2023, 16:09
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

рони,
А, я кажется понял.
Автор таки хочет время в UTC, т.к. 1679287353711 - '20.03.2023, 07:42:33' для UTC+3 (Europe/Moscow).
Значит вы все сделали правильно, а у автора единственная проблема в коде - строка №3.

mik888em, у вас третья строка должна быть такая и все будет работать, как планировали:
var hours = date.getUTCHours();
Ответить с цитированием
  #7 (permalink)  
Старый 20.03.2023, 16:17
Кандидат Javascript-наук
Отправить личное сообщение для mik888em Посмотреть профиль Найти все сообщения от mik888em
 
Регистрация: 21.06.2020
Сообщений: 145

Спасибо) Вобщем так сделал и все заработало
(new Date(1679287353711))
  .toISOString() // "2023-03-20T04:42:33.711Z"
  .substring(11, 23) // "04:42:33.711"
;
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно подгрузить js файл через javascript alanat Общие вопросы Javascript 6 27.01.2020 11:03
Как через JS задать ширину родителя как у ребенка? ethereal Элементы интерфейса 6 13.01.2020 11:05
Как правильно перенести js в отдельный файл Evgeny1987 Общие вопросы Javascript 0 17.02.2016 16:21
как правильно отслеживать вставку html() bombascter jQuery 15 20.11.2012 09:47
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20