Come convertire i secondi in formato Ore : Minuti : Secondi?

Utilizzando il tool da riga di comando ffprobe ricevo la durata di un video in secondi.

Attraverso l’esecuzione del comando con specifici parametri, riesco ad ottenere la risposta in formato JSON, che risulta ottimale per una comunicazione tra processi distinti.

Passando questa informazione, per esempio tramite un’API REST, ad una WebApp, potrei avere la necessità di rendere la durata comprensibile all’essere umano, ovvero nel formato HH:MM:SS.

Con questa piccola funzione ottengo il risultato:

function timing(duration) {
const slots = []
duration = Math.ceil(duration)
while (duration > 59 && slots.length < 2) {
slots.push( (duration % 60).toString().padStart(2, '0'))
duration = Math.floor(duration / 60)
}
if( duration > 0 ) slots.push(duration);
return slots.reverse().join(':')
}
view raw timing.js hosted with ❤ by GitHub

https://gist.github.com/diegolamonica/75b99e4e01e29106c0b22d27c50169d0

Che cosa faccio di preciso?

  1. Creo un’array di slot, il cui il limite massimo può essere di 3 elementi(uno per i secondi, uno per i minuti e uno per le ore).
  2. verifico se la durata è superiore a 59 secondi (60 secondi = 1 minuto ed è vero anche che 60 minuti = 1 ora).
  3. verifico inoltre di non aver già impegnato 2 slot, altrimenti sto elaborando le ore (per le quali non ci sono limiti).

Avrò a questo punto un array nel formato [ Secondi, Minuti, Ore ].

Sarà sufficiente invertire gli elementi dell’array (metodo reverse) e quindi concatenare con i “:” (metodo join) gli elementi per ottenere una stringa.

Foto di Thomas Bormans su Unsplash