Невозможно получить ожидаемый результат с методом Date() в JavaScript

Я работаю над музыкальным приложением. Если музыкальный файл был добавлен, я должен получить длительность (в миллисекундах) и преобразовать ее в минуты.

var d = new Date(ms);
var hms = d.getMinutes().toString() +':'+ d.getSeconds().toString();

Если я предоставляю ms = 331807;

expected answer is = 11:42 но result is = 41:02
Я не могу понять проблему. Может кто-нибудь, пожалуйста, помогите мне найти решение?

2 ответа

Решение

Date Объект ожидает миллисекунды с 1 января 1970 года по Гринвичу. Тем не менее getMinutes а также getSeconds функции будут выводиться относительно часового пояса, в котором выполняется код.

Если вы хотите использовать Date объект для этого, вы должны использовать getUTCMinutes а также getUTCSeconds вместо.

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

Date конструктор создает новый объект с необязательным аргументом, переданным ему. Передавая количество миллисекунд, вы получаете новый Date объект, который является датой и временем с начала эпохи, относительно количества миллисекунд, которые вы ему передали. getMinutes вероятно, дал вам 42, потому что время, которое вы прошли в Date конструктор был на 42-й минуте любой даты, когда был построен.

Вы можете конвертировать миллисекунды в минуты с простым умножением.

numberOfMilliseconds / (1000*60)
Другие вопросы по тегам