Skip to content

Instantly share code, notes, and snippets.

@parzibyte

parzibyte/index.js

Created Jan 3, 2019
Embed
What would you like to do?
Minutos a tiempo legible created by parzibyte - https://repl.it/@parzibyte/Minutos-a-tiempo-legible
/**
* Función que convierte un número de minutos
* a su representación legible en horas, días, semanas,
* meses y años. Por ejemplo:
*
* 72080 minuto(s) son 1 mes, 2 semanas, 6 días, 1 hora, 20 minutos
*
*
* @author parzibyte
*/
const minutosATiempo = minutos => {
const leyenda = (numero, palabra, plural) => numero === 0 || numero > 1 ? `${numero} ${palabra}${plural || "s"}` : `${numero} ${palabra}`;
const MINUTOS_POR_HORA = 60,
HORAS_POR_DIA = 24,
DIAS_POR_SEMANA = 7,
DIAS_POR_MES = 30,
MESES_POR_ANIO = 12;
if (minutos < MINUTOS_POR_HORA) return leyenda(minutos, "minuto");
let horas = Math.floor(minutos / MINUTOS_POR_HORA),
minutosSobrantes = minutos % MINUTOS_POR_HORA;
if (horas < HORAS_POR_DIA) return leyenda(horas, "hora") + (minutosSobrantes > 0 ? ", " + minutosATiempo(minutosSobrantes) : "");
let dias = Math.floor(horas / HORAS_POR_DIA);
minutosSobrantes = minutos % (MINUTOS_POR_HORA * HORAS_POR_DIA);
if (dias < DIAS_POR_SEMANA) return leyenda(dias, "día") + (minutosSobrantes > 0 ? ", " + minutosATiempo(minutosSobrantes) : "");
let semanas = Math.floor(horas / (HORAS_POR_DIA * DIAS_POR_SEMANA));
minutosSobrantes = minutos % (MINUTOS_POR_HORA * HORAS_POR_DIA * DIAS_POR_SEMANA);
if (dias < DIAS_POR_MES) return leyenda(semanas, "semana") + (minutosSobrantes > 0 ? ", " + minutosATiempo(minutosSobrantes) : "");
let meses = Math.floor(horas / (HORAS_POR_DIA * DIAS_POR_MES));
minutosSobrantes = minutos % (MINUTOS_POR_HORA * HORAS_POR_DIA * DIAS_POR_MES);
if (meses < MESES_POR_ANIO) return leyenda(meses, "mes", "es") + (minutosSobrantes > 0 ? ", " + minutosATiempo(minutosSobrantes) : "");
let anios = Math.floor(horas / (HORAS_POR_DIA * DIAS_POR_MES * MESES_POR_ANIO));
minutosSobrantes = minutos % (MINUTOS_POR_HORA * HORAS_POR_DIA * DIAS_POR_MES * MESES_POR_ANIO);
return leyenda(anios, "año") + (minutosSobrantes > 0 ? ", " + minutosATiempo(minutosSobrantes) : "");
};
const tiempos = [
0,
1,
20,
50,
70,
60,
59,
7200,
1440,
7250,
36080,
72080,
86400,
720800,
894540,
];
tiempos.forEach(tiempo => {
console.log(`${tiempo} minuto(s) son ${minutosATiempo(tiempo)}`)
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment