En un sistema web en el que he estado trabajando tuve la necesidad de convertir minutos a su representación como texto, en cantidades más grandes. Por ejemplo, 59 minutos son 59 minutos, pero 60 minutos son 1 hora, así que en lugar de mostrarlos como minutos, se muestran como horas.

Minutos a tiempo legible en JavaScript

Minutos a tiempo legible en JavaScript

La función que escribí puede convertir cualquier número de minutos a su representación como horas, días, semanas, meses o años. Con los ejemplos veremos de lo que hablo.

Función que convierte minutos a una representación entendible

Como lo dije, esta función de JavaScript convierte un número de minutos a su representación como otras unidades de tiempo. Veamos algunos ejemplos:

  • 0 minuto(s) son 0 minutos
  • 1 minuto(s) son 1 minuto
  • 20 minuto(s) son 20 minutos
  • 50 minuto(s) son 50 minutos
  • 70 minuto(s) son 1 hora, 10 minutos
  • 60 minuto(s) son 1 hora
  • 59 minuto(s) son 59 minutos
  • 7200 minuto(s) son 5 días
  • 1440 minuto(s) son 1 día
  • 7250 minuto(s) son 5 días, 50 minutos
  • 36080 minuto(s) son 3 semanas, 4 días, 1 hora, 20 minutos
  • 72080 minuto(s) son 1 mes, 2 semanas, 6 días, 1 hora, 20 minutos
  • 86400 minuto(s) son 2 meses
  • 720800 minuto(s) son 1 año, 4 meses, 2 semanas, 6 días, 13 horas, 20 minutos
  • 894540 minuto(s) son 1 año, 8 meses, 3 semanas, 5 horas

Con eso ya nos vamos dando una idea de lo que ofrece esta función. Se puede modificar para que convierta segundos o incluso milisegundos; así como también se puede editar para soportar décadas, siglos y esas cosas; todo copiando y pegando.

La función es esta:

Se puede observar que la función recibe un número de minutos, y devuelve una cadena con texto legible. La unidad de medida se pluraliza correctamente gracias a la función (definida dentro de la misma) llamada leyenda. Esta función se encarga de agregar la “s” en caso de que el número sea 0 o mayor a 1, para mostrar correctamente “minuto” o “minutos” y lo mismo con las horas, días, etcétera.

Por cierto, si no entiendes la sintaxis, mira lo que son las arrow functions, plantillas de cadena y let y const.

Una cosa interesante es el uso de la recursión o recursividad; pues gracias a ella se ahorra código. En el primer intento no se me había ocurrido, pero después de pensar un poco me di cuenta de que con la recursividad podría evitar más condiciones y operaciones.

Ah, que quede claro que en el código también se muestran algunos ejemplos de uso, pero la función es independiente de todo ello.

Sobre el rendimiento

Sé bien que esta función no es la más eficaz, pues define una función dentro de sí misma, además de que puede caer en una gran pila de recursión (poco probable, pues aunque sean años no excede las 5 llamadas); pero es la única manera que se me ocurrió para resolver el problema.

No hay problema con el rendimiento; es decir, aunque la función podría estar más optimizada, ni siquiera se nota que sea lenta o algo así, sólo decía; de hecho puedes probar por ti mismo y verás que no pasa nada incluso con números grandes.

Descargar ejemplo

Si quieres, descarga el código de ejemplo. Para ejecutarlo puedes pegarlo en la consola del navegador, o guardarlo en un archivo, navegar con la terminal hasta donde lo hayas guardado y ejecutar node minutos.js en donde minutos.js es el nombre del archivo. Si no tienes Node.JS mira cómo instalarlo aquí.

Probar ejemplo en línea

Como siempre, te invito a probar el ejemplo sin salir del navegador:

No te vayas sin seguirme en Twitter, Facebook y GitHub, así me motivas a escribir más posts.
Igualmente te invito a suscribirte en la parte superior derecha escribiendo tu correo en el formulario.
Si tienes dudas déjalas en un comentario


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: