Tengo algo de lógica diseñada para generar una duración formateada basada en un tiempo de inicio y finalización ingresado:
getFormattedDuration = async (stopValue, startValue) => { const durValue = moment(stopValue, "H:mm").diff(moment(startValue, "H:mm")); const t = moment.duration(durValue); const duration = { hours: t.hours(), minutes: t.minutes() } const formattedDuration = `0${duration.hours}:${duration.minutes}`; return formattedDuration; // I'm prepending a `0` here because I know the duration will never be above a certain limit - ie it will never get to a double digit number for hours. }Esto funciona en su mayor parte. Pero en ocasiones terminaré con algo como esto para la salida:
duration: Object { "hours": 0, "minutes": 8, } formattedDuration: 00:8 Lo que quiero aquí es 00:08 . ¿Cómo puedo rellenar con ceros, según sea necesario, para asegurarme de obtener un valor de duración con el formato correcto, que debería tener este formato hh:mm . ¿Tiene moment.js una función que pueda usar para manejar esto?
Puede usar la función format() de moment.js.
const m = moment('00:8','HH:mm').format('HH:mm'); console.log(m) // "00:08" m = moment('00:8','HH:mm').format('HH:mm'); console.log(m) <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>Puede usar .padStart() para asegurarse de que haya ceros a la izquierda.