#javascript #date
Вопрос:
Мне нужно преобразовать секунды в формат времени:
seconds_1 = 540;
seconds_2 = -2820;
convert_1 = new Date(seconds_1 * 1000).toISOString().substr(11, 8);
convert_2 = new Date(seconds_2 * 1000).toISOString().substr(11, 8);
console.log(convert_1);
console.log(convert_2);
он вернется,
convert_1 : 00:09:00
convert_2 : 23:13:00
первый (convert_1) верен, но второй должен вернуться -00:47:00
.
Фактическая проблема заключается в том, что отрицательное значение неправильно преобразуется во время.
Пожалуйста, помогите.
Я попробовал это,
function toTime(duration) {
// Hours, minutes and seconds
var hrs = ~~(duration / 3600);
var mins = ~~((duration % 3600) / 60);
var secs = ~~duration % 60;
let ret = hrs ":" mins ":" secs;
return ret;
}
seconds_1 = 540;
seconds_2 = -2820;
console.log(toTime(seconds_2 ));
Комментарии:
1.
Date
Объект не является подходящим инструментом для этого, лучше всего просто разделить значение на секунды, минуты и часы, преобразовать их в строки, дополненные по0
мере необходимости, а затем объединить их в строку вручную.2. Нет такого времени, как
-00:47:00
… вы имеете в виду преобразование секунд в минуты?
Ответ №1:
Прагматичное решение состоит в том, чтобы удалить знак, а затем добавить его снова:
function toTime(seconds) {
if (seconds < 0) return "-" toTime(-seconds);
return new Date(seconds * 1000).toISOString().substr(11, 8);
}
console.log(toTime(540));
console.log(toTime(-2820));
Комментарии:
1. Хорошенькая…….
Ответ №2:
Просто проверьте
const convert = secs => {
const sign = secs < 0
const hhmmss = new Date(Math.abs(secs) * 1000).toISOString().substr(11, 8);
return sign ? '-' hhmmss : hhmmss
}
console.log(convert(540));
console.log(convert(-2820));