Tengo que convertir segundos a formato de hora:
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);
regresará,
convert_1 : 00:09:00 convert_2 : 23:13:00
el primero (convert_1) es correcto, pero el segundo debería devolver -00:47:00
.
El problema real es que el valor negativo no se está convirtiendo en tiempo correctamente.
Por favor ayuda.
Intenté esto,
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 ));
Una solución pragmática es eliminar el signo y luego agregarlo nuevamente:
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));
Solo prueba
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));