Avatar billede Slettet bruger
04. november 2010 - 13:34 Der er 12 kommentarer

Counter fra unix-time

Hejsa,

jeg har en unix timestamp i min php som f.eks er 12239494.

Hvordan laver jeg en countdown, som viser hvor lang tid der er tilbage til den udløber? F.eks: "Tilbage: 1 time, 49 min.", hvor den tæller ned automatisk uden at skulle opdatere siden?

På forhånd mange tak.
Avatar billede Slettet bruger
04. november 2010 - 13:52 #1
Måske noget i denne stil:

var secondsLeft = <?php print($timestamp); ?> - Math.round(new Date().getTime() / 1000);
function countDown() {
  document.getElementById('counter').firstChild.nodeValue = secondsLeft--;
}
countInterval = setInterval(countDown, 1000);
Avatar billede bkp Nybegynder
04. november 2010 - 13:48 #2
Jeg vil anbefale at du gemmer starttiden i en variabel og med en jQuery timer kan du med jævne mellemrum tælle ned.

http://plugins.jquery.com/project/timers
Avatar billede Slettet bruger
04. november 2010 - 13:53 #3
#1, ingen grund til at bruge jQuery til noget så simpelt. Det er bare 50 kB og et halvt sekunds overhead.
Avatar billede Slettet bruger
04. november 2010 - 13:54 #4
Ja, men skal vel først på en eller anden måde konvertere unix-stampen til alm. tid, også derefter tælle ned, det er der jeg ikke kan komme videre.
Avatar billede Slettet bruger
04. november 2010 - 18:19 #5
Et Unix-timestamp er helt normal tid, nemlig sekunder siden kl. 0.00 d. 1. januar, 1970. Derfor er meget let at regne ud, hvor lang tid der er mellem to Unix-timestamps, du trækker bare den ene fra den anden, så har du antallet af sekunder.

Hvis du hellere vil vise antallet af timer og minutter, gøres dette også let:

var secondsLeft = <?php print($timestamp); ?> - Math.round(new Date().getTime() / 1000);
function countDown() {
  secondsLeft--;
  hoursLeft = (secondsLeft - secondsLeft % 3600) / 3600;
  minutesLeft = (secondsLeft - secondsLeft % 60 - hoursLeft * 3600) / 60;
  document.getElementById('counter').firstChild.nodeValue = 'Tilbage: ' + hoursLeft + ' ' + ((hoursLeft == 1)?'time':'timer') + ', ' + minutesLeft + ' min.';
}
countInterval = setInterval(countDown, 1000);
Avatar billede dk-andersson Nybegynder
08. april 2011 - 08:51 #6
hvis den også skal vise sekunder hvordan??
Avatar billede Slettet bruger
08. april 2011 - 11:03 #7
secondsLeft % 60
Avatar billede dk-andersson Nybegynder
08. april 2011 - 14:37 #8
takker... en sidste ting. Hvordan tjekker jeg om minutter er med 2 decimaler?? og hvis den ikke er skal de sætte 0 foran?
Avatar billede dk-andersson Nybegynder
08. april 2011 - 14:37 #9
og det samme med sekunder?
Avatar billede Slettet bruger
08. april 2011 - 14:51 #10
Man kunne sagtens lave en generel funktion, men i dette tilfælde er det vist lettest bare at tjekke, om tallet er under 10 (her med en ternary operator):

somethingLeft < 10 ? "0" + somethingLeft : somethingleft
Avatar billede dk-andersson Nybegynder
15. juli 2011 - 13:08 #11
smid et svar
Avatar billede Slettet bruger
15. juli 2011 - 15:17 #12
Here you go!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester