2012-05-05 11 views
6

fand ich die Momentjs Bibliothek, die ziemlich cool ist, aber ich finde nicht die Dokumentation sehr klar sein, wie einige einfache Aufgaben zu erreichen. Ich versuche, einen Countdown-Timer zu bauen und ich vermute ich die Dauer verwenden soll, aber ich verstehe nicht ganz, wie (vielleicht aufgrund der Tatsache, dass Englisch nicht meine Muttersprache ist). Auch immer das ist, was ich will:Momentjs und Countdown-Timer

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); 

So everysecond sollte es zeigen:

02:00:00

01:59:59

01:59:58

01:59:57

...

00:00:00

Wie würde ich dieses Ergebnis mit der Momentjs-Bibliothek erreichen? Danke!

+0

ich weiß nicht, die momentjs Bibliothek , aber es scheint, dass Sie 'setInterval' stattdessen wollen. – pimvdb

+0

Momentjs stellt Methoden Zeiten und Daten zu bekommen, aber es tut nichts anderes, so muß ich mein eigenes Skript bauen es zu subtrahieren 1 Sekunde von der setInterval-Funktion in jeder Sekunde und anzuzeigen. – Ignas

+0

Oh Mist, ich verstehe, was du jetzt sagst. Der Fehler wurde behoben. – Ignas

Antwort

13

duration Objekt stellt eine statische Zeit, und es erhöht nicht/Abnahme mit dem Fluss der Zeit. Also, wenn Sie, was es zu verringern haben Sie es selbst zu tun, zum Beispiel eine Art eines Sekundenzählers erstellen oder neu zu erstellen duration Objekt jedes Mal. Hier ist der Code für die zweite Option:

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 für die Erklärung und die Lösung, die genau das, was ich suchte. Vielen Dank! – Ignas

2

Ich weiß Momentjs nicht sehr gut auch nicht, aber ich glaube, Sie suchen so etwas wie:

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

Dank integriert! – Ignas

1

https://github.com/jsmreese/moment-duration-format Es ist ein Plugin zur Moment.js JavaScript Datum Bibliothek hinzufügen umfassende Formatierung Moment Dauern

<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>