SOLUCIONADO: Parece que es un problema que solo existe en Codepen. Ejecutar código en un entorno diferente no reprodujo el problema.
Estoy escribiendo código para dividir segundos en años, días, minutos, segundos. Obtengo algunos resultados inesperados: por ejemplo, 3600 segundos salen como 1 hora. Pero 3599 segundos resultan 60 minutos y 59 segundos.
En primer lugar, nunca debe haber 60 minutos. Esto debería ser 1 hora. Pero aparte de eso, el resultado real es incorrecto.
¿Hay algún error en mi lógica de cálculo, o hay un error de redondeo funky usando módulo y Math.floor? ¡Gracias!
function convertFromSeconds(time) { const minute = 60 const hour = 60 * minute; //3600 const day = 24 * hour; // 86400 const year = 365 * day //31536000 const years = Math.floor(time / year) const days = Math.floor((time % year) / day) const hours = Math.floor((time % day) / hour) const minutes = Math.floor((time % hour) / minute) const seconds = time % minute; // Rest of code formats the above result into a string for output } function convertFromSeconds(time) { const minute = 60 const hour = 60 * minute; //3600 const day = 24 * hour; // 86400 const year = 365 * day //31536000 const years = Math.floor(time / year) const days = Math.floor((time % year) / day) const hours = Math.floor((time % day) / hour) const minutes = Math.floor((time % hour) / minute) const seconds = time % minute; // Rest of code formats the above result into a string for output return { years, days, hours, minutes, seconds } } console.log('3600:', convertFromSeconds(3600)) console.log('3599:', convertFromSeconds(3599))