2012-05-05 119 views
6

Encontré la biblioteca de Momentjs, que es muy buena, sin embargo, no encuentro la documentación muy clara sobre cómo lograr algunas tareas simples. Estoy intentando construir un temporizador de cuenta regresiva y supongo que debería usar el objeto de duración, pero no entiendo muy bien cómo (quizás debido al hecho de que el inglés no es mi primer idioma). De todas formas esto es lo que quiero:Momentjs y temporizador de cuenta regresiva

var time = 7200; 
var duration = moment.duration('seconds',time); 

setInterval(function(){ 
    //show how many hours, minutes and secods are left 
    $('.countdown').text(duration.format('h:mm:ss')); 
    //this doesn't work because there's no method format for the duration object. 
},1000); 

Así everysecond debería mostrar:

02:00:00

01:59:59

01:59:58

01:59:57

...

00:00:00

¿Cómo puedo lograr este resultado con la biblioteca de Momentjs? Gracias!

+0

No sé la biblioteca momentjs , pero parece que quieres 'setInterval' en su lugar. – pimvdb

+0

Momentjs proporciona métodos para obtener horas y fechas, pero no hace nada más, así que tengo que crear mi propia secuencia de comandos para restar 1 segundo por segundo y mostrarlo desde la función setInterval. – Ignas

+0

Oh mierda, entiendo lo que dices ahora. Solucionado el error. – Ignas

Respuesta

13

duration objeto representa un período estático, y no aumenta/disminuye con el flujo de hora. Entonces, si tiene que disminuirlo, tiene que hacerlo usted mismo, por ejemplo, creando un tipo de contador de segundos o recreando el objeto duration todo el tiempo. Aquí está el código para la segunda opción:

var time = 7200; 
var duration = moment.duration(time * 1000, 'milliseconds'); 
var interval = 1000; 

setInterval(function(){ 
    duration = moment.duration(duration.asMilliseconds() - interval, 'milliseconds'); 
    //show how many hours, minutes and seconds are left 
    $('.countdown').text(moment(duration.asMilliseconds()).format('h:mm:ss')); 
}, interval); 
+1

+1 para la explicación y la solución que es exactamente lo que estaba buscando. ¡Gracias! – Ignas

2

No sé Momentjs muy bien tampoco, pero creo que se está buscando algo como esto:

var time = 7200; 
var duration = moment.duration('seconds',time); 

setInterval(function(){ 
    var countdown = duration.milliseconds(); 
    $('.countdown').text(moment(countdown).format('h:mm:ss')); 
},1000); 
+0

¡Gracias por ponerme en el camino correcto! – Ignas

1

https://github.com/jsmreese/moment-duration-format Es un plugin para la biblioteca de la fecha Moment.js JavaScript para agregar formato integral a momento duraciones

<script type="application/javascript" src="/js/moment.js"></script> 
<script type="application/javascript" src="/js/moment-duration-format.js"></script> 

<script> 

function startTimer(){ 

var duration = moment.duration({ 
    'hour': 2, 
    'minutes': 0, 
    'seconds': 0 
}); 

var interval = 1; 

var timerID = -1; //hold the id 

var timer = setInterval(function() { 

    if(duration.asSeconds() <= 0){ 
     console.log("STOP!"); 
     console.log(duration.asSeconds()); 
     clearInterval(timerID); 
    } 
    else{ 

    duration = moment.duration(duration.asSeconds() - interval, 'seconds'); 

    $('.countdown').html(duration.format("hh:mm:ss", { trim: false })); 
    } 

}, 1000); 

timerID = timer; 

return timer; 
}; 

//start 
myTimer = startTimer();  

//stop 
//clearInterval(myTimer); 

</script> 
Cuestiones relacionadas