Este es un problema común pero no estoy seguro de cómo resolverlo. El siguiente código funciona bien.
var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);
var secd = mind % 60;
var seconds = Math.ceil(secd);
Sin embargo, cuando llego a 1 hora o 3600 segundos, devuelve 0 minutos y 0 segundos. ¿Cómo puedo evitar esto para que devuelva todos los minutos?
Gracias
javascript
James Moore
fuente
fuente
Respuestas:
Para obtener el número de minutos completos, divida el número de segundos totales por 60 (60 segundos / minuto):
Y para obtener los segundos restantes, multiplique los minutos completos por 60 y reste del total de segundos:
Ahora, si también desea obtener las horas completas, divida el número de segundos totales por 3600 (60 minutos / hora · 60 segundos / minuto) primero, luego calcule los segundos restantes:
Luego calcula los minutos completos y los segundos restantes.
Prima:
Use el siguiente código para imprimir la hora bonita (sugerido por Dru)
fuente
function str_pad_left(string,pad,length){ return (new Array(length+1).join(pad)+string).slice(-length); } var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);
time
. Si, por ejemplo, ingresas -1 segundos, obtienes -1 minuto y 59 segundos de regreso ...time
? Lógicamente, una diferencia horaria siempre es positivavar seconds = time % 60
Otra solución elegante:
~~
es una abreviatura paraMath.floor
ver este enlace para más informaciónProbar en línea
fuente
~~
?Math.floor
ver este enlace .time = math.round(time)
a la primera línea para darme segundos redondeados.Para las personas que esperan obtener una solución rápida, simple y, por lo tanto, corta para formatear segundos en
M:SS
:hecho ..
La función acepta ya sea un
Number
(preferido) o unaString
(2 conversión penalties que se puede reducir a la mitad anteponiendo+
en el argumento de la llamada de función para las
que en:fmtMSS(+strSeconds)
), que representa segundos enteros positivoss
como argumento.Ejemplos:
Descompostura:
Nota: El rango negativo podría agregarse anteponiendo
(0>s?(s=-s,'-'):'')+
a la expresión de retorno (en realidad,(0>s?(s=-s,'-'):0)+
también funcionaría).fuente
Math.floor(s)
a la última línea para obtener resultados más limpios. Funciona muy bien de todos modos, gracias!9
y10
sin modificaciones adicionales; si ingresó, por ejemplo69.25
, ¡la salida sería en1:9
lugar de1:09
! Esta función (para la cual especifiqué explícitamente los segundos enteros) está diseñada y diseñada con mucho cariño como herramienta / 'motor' de crujido de alto rendimiento (no tiene golf ninja para el tamaño) y, como tal, considero inapropiado cargar ese motor con verificación innecesaria / cleanup / filtering ...NaN
,+/-Infinity
etc.) y opciones de redondeo que debe hacer el programador, antes de llamar a la función, en función de las necesidades específicas y los posibles valores de entrada que la aplicación puede encontrar. Naturalmente, es libre de parchearlo si su conocimiento del dominio sobre los valores de entrada esperados dicta que su caso de uso particular casi siempre recibe valores de punto flotante y las pruebas de rendimiento indican que su aplicación. En su caso en el que desea parchear solo en pisos de valores positivos , DEBE ...(9<s?':':':0')
a(10>s?':0':':')
(agregando 1 carácter pero 'sacrificando' 5 de 6 rutas verdaderas a rutas falsas) O(10<=s?':':':0')
(agregando 2 caracteres pero manteniendo 5 de 6 rutas verdaderas). Luego, le aconsejo que cambie ese final final+s
en+(s|0)
lugar deMath.floor(s)
, para no destruir la belleza de no tener que resolver y llamarMath.floor
mientras todavía funciona correctamente en todo el+/-MAX_SAFE_INTEGER
rango de 53 bits en lugar de 'solo' rango de 32 bits (sin firmar) o 31 bits (con firma). Tenga en cuenta queABS(s)
se garantiza que magnetude sea menor que 60, por lo que el firmado ...PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
También puede usar el objeto Fecha nativo:
Por supuesto, esta solución solo funciona durante timeInSeconds menos de 24 horas;)
fuente
date
también podría ser construido comovar date = new Date(timeInSeconds * 1000)
2019 mejor variante
Formato
hh:mm:ss
fuente
seconds
es constante. No puedes reasignarlo.let
, por ejemplo, ¿function display (state) { let seconds = state.seconds; ... }
fue de ahí de dónde vino su error?%=
estás reasignando este parámetro. Solo useseconds%60
fuente
function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
0
s contime
, ¿estoy en lo cierto?function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Para agregar ceros a la izquierda, simplemente haría:
Agradable y corto
fuente
Limpie un revestimiento usando ES6
fuente
Un trazador de líneas (no funciona con horas):
fuente
Segundos a h: mm: ss
fuente
minutes < 10 ? '0' + minutes : minutes
, asumiendo solo conocimientos básicos de js?La siguiente función lo ayudará a obtener días, horas, minutos, segundos
fuente
if (Days > 0){ ddhhmmss += Days + ' Day '; }
aif (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};
decir1 Day
,2 Days
,3 Days
etc. similares se puede hacer por los demás.Después de todo esto, otra solución más simple:
fuente
time.setSeconds(1);
devoluciones1 0 1
cuando debería ser0 0 1
.Otra solución mucho más elegante para esto es la siguiente:
fuente
Para agregar ceros, realmente no veo la necesidad de tener otra función completa donde simplemente pueda usar, por ejemplo
Es por eso que tenemos declaraciones condicionales en primer lugar.
(condición? si es verdadero: si es falso) así que si los segundos de ejemplo son más de 9 que solo mostrar segundos, agregue una cadena 0 antes.
fuente
intente esto: convirtiendo el segundo a HORAS, MIN y SEC.
fuente
fuente
Si está utilizando Moment.js , puede usar el
Duration
objeto incorporadofuente
ACTUALIZACIÓN 2020
Usando matemáticas básicas y JavaScript simple, esto se puede hacer en solo unas pocas líneas de código.
EJEMPLO - Convertir
7735 seconds
aHH:MM:SS
.MATEMÁTICAS:
Uso de cálculos:
Math.floor()
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor%
operador aritmético (resto): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#RemainderMira el código a continuación. Los segundos se dividen entre
3600
para obtener el número de horas y el resto, que se utiliza para calcular el número de minutos y segundos.HOURS => 7735 / 3600 = 2 remainder 535
MINUTES => 535 / 60 = 8 remainder 55
SECONDS => 55
CEROS A LA IZQUIERDA:
Muchas respuestas aquí usan métodos complicados para mostrar el número de horas, minutos y segundos de manera adecuada con cero a la izquierda
45
,04
etc. Esto se puede hacer usandopadStart()
. Esto funciona para cadenas, por lo que el número debe convertirse a cadena usandotoString()
.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
CÓDIGO:
fuente
Has hecho suficiente código para rastrear minutos y segundos porciones de tiempo.
Lo que podría hacer es agregar el factor horas en:
Esto te daría lo que necesitas también.
fuente
Estaba pensando en una forma más rápida de hacer esto y esto es lo que se me ocurrió
Si queremos convertir el "tiempo" en minutos y segundos, por ejemplo:
fuente
Pon mis dos centavos en:
Así que esto :
Tendrá el siguiente resultado:
Luego puede imprimirlo así:
fuente
strftime.js ( strftime github ) es una de las mejores bibliotecas de formato de tiempo. Es extremadamente ligero, 30 KB, y efectivo. Utilizándolo, puede convertir segundos en tiempo fácilmente en una línea de código, confiando principalmente en la clase Date nativa.
Al crear una nueva Fecha, cada argumento opcional es posicional de la siguiente manera:
Entonces, si inicializa una nueva Fecha con todos los argumentos como cero hasta los segundos, obtendrá:
Puede ver que 150 segundos son 2 minutos y 30 segundos, como se ve en la fecha de creación. Luego, utilizando un formato de tiempo de ejecución ("% M:% S" para "MM: SS"), generará la cadena de minutos.
En una línea, se vería así:
Además, esto le permitiría un soporte intercambiable HH: MM: SS y MM: SS en función de la cantidad de segundos. Por ejemplo:
Y, por supuesto, puede simplemente pasar el formato que desee a medio tiempo si desea que la cadena de tiempo sea más o menos semántica.
Espero que esto ayude.
fuente
fuente
Sugiero otra solución:
fuente
Sé que se ha resuelto de muchas maneras. Necesitaba esta función para un script de After Effects, donde la velocidad o la contaminación del espacio de nombres no es un problema. Lo dejo aquí para alguien que necesita algo similar. También escribí algunas pruebas y funcionó bien. Así que aquí está el código:
fuente