Estoy canalizando un valor de tiempo que se parece a este PT43H22M15S, por ejemplo, a través de algunos métodos de matriz para que, mientras cuenta, pueda salir del otro lado con este aspecto 43:22:15. La forma en que hago esto es así ...
return this.millisRemaining$.pipe( map((val) => { console.log(val); const duration = Duration.fromMillis(val); console.log(duration); const result = duration .shiftTo('hours', 'minutes', 'seconds') .toString(); console.log(result); return result; }), map((val) => { console.log(`from tap: ${val}`); const slicedVal = val.slice(2); console.log(slicedVal); const replacedVal = slicedVal .replace('H', ':') .replace('M', ':') .replace('S', ''); console.log(replacedVal); return replacedVal; }) ); } sin embargo, tengo un problema. Digamos que quiero comenzar con 43 horas. La salida será 43: y si el número anterior es un 0 no aparecerá. como :11 ... :10 ... :9 ...etc ¿Cómo hago para que muestre 43:00:00 and :09 ... :08 , etc.?
Use la función toFormat: https://moment.github.io/luxon/api-docs/index.html#durationtoformat
StackBlitz: https://stackblitz.com/edit/node-v364nf?file=index.js
En NodeJS usando Luxon versión 2.3.1:
import { Duration } from 'luxon'; const duration1 = Duration.fromObject({ hour: 43 }); const output1 = duration1.toFormat('T-hh:mm:ss'); console.log(output1); //T-43:00:00 const duration2 = duration1.minus({ hours: 3, minutes: 33, seconds: 33 }); const output2 = duration2.toFormat('T-hh:mm:ss'); console.log(output2); //T-39:26:27 const isoDuration = Duration.fromISO('PT43H22M15S'); const output3 = isoDuration.toFormat('T-hh:mm:ss'); console.log(output3); //T-43:22:15Resultado del código:
❯ npm run start $ node index.js T-43:00:00 T-39:26:27 T-43:22:15