Avatar billede sorenmt84 Juniormester
23. april 2008 - 12:51 Der er 22 kommentarer og
1 løsning

Nedtælling - indsæt "0" hvis tal under 10

Har dette nedtællingssystem:

<HTML>
<HEAD>
<script language="JavaScript">
ie = document.all
nn = document.layers

function CountDown()
{
  var nu = new Date();
  var Totusind = new Date(2008, 3, 27, 00, 00, 1);
  var S = Totusind.getTime() - nu.getTime();
  var T, M, Se, Ms;
  T = Math.floor(S / (60*60*1000));
  S = S - (T * (60*60*1000));
  M = Math.floor(S / (60*1000));
  S = S - (M * (60*1000));
  Se = Math.floor(S/1000);
  S = S - (Se * 1000);
  Ms = Math.floor(S / 10);
Temp = parseInt(T,10)+' timer '+parseInt(M,10) + ' minutter ' + parseInt(Se,10) + ' sekunder ' + parseInt(Ms, 10) + ' hundrededele ';
  if (ie) {tid.innerHTML=Temp;}
  else {document.tid.document.write(Temp); document.tid.document.close()}
  setTimeout ("CountDown()", 1);
}

function Init()
{
  setTimeout ("CountDown()", 1);
}

</script>
<BODY onLoad="Init()">
<SCRIPT LANGUAGE="JavaScript">
<!--
if (ie) {document.write('<DIV ID="tid"></DIV>')}
else{document.write('<layer id="tid" width=350 height=10></layer>')}
//-->
</SCRIPT>

</BODY>
</HTML>

Jeg vil gerne have indsat et 0 før det givne tal (timer, minutter, sekunder, hundrededele) - Hvis det er 9 eller derunder, således så jeg undgår at teksterne kommer til at stå og "hoppe" når der pludselig forsvinder et tal og linjen derfor bliver kortere (det ser især dumt ud på hundrededele)
Avatar billede w13 Novice
23. april 2008 - 13:00 #1
Så retter du bare:

  T = Math.floor(S / (60*60*1000));
  S = S - (T * (60*60*1000));
  M = Math.floor(S / (60*1000));
  S = S - (M * (60*1000));
  Se = Math.floor(S/1000);
  S = S - (Se * 1000);
  Ms = Math.floor(S / 10);

til:

  T = Math.floor(S / (60*60*1000));
  T = T<10 ? "0"+T : T;
  S = S - (T * (60*60*1000));
  M = Math.floor(S / (60*1000));
  M = M<10 ? "0"+M : M;
  S = S - (M * (60*1000));
  Se = Math.floor(S/1000);
  S = S - (Se * 1000);
  S = S<10 ? "0"+S : S;
  Ms = Math.floor(S / 10);
  Ms = Ms<10 ? "0"+Ms : Ms;

Det burde gøre det.
Avatar billede sorenmt84 Juniormester
23. april 2008 - 13:12 #2
det virker desværre ikke...
Avatar billede w13 Novice
23. april 2008 - 13:14 #3
Giver den fejl?
Avatar billede w13 Novice
23. april 2008 - 13:15 #4
Nå ja, det er klart, der parses jo til Integer her:

Temp = parseInt(T,10)+' timer '+parseInt(M,10) + ' minutter ' + parseInt(Se,10) + ' sekunder ' + parseInt(Ms, 10) + ' hundrededele ';

To sek.
Avatar billede w13 Novice
23. april 2008 - 13:16 #5
Ret lige også:

Temp = parseInt(T,10)+' timer '+parseInt(M,10) + ' minutter ' + parseInt(Se,10) + ' sekunder ' + parseInt(Ms, 10) + ' hundrededele ';

til:

Temp = T+' timer '+M+ ' minutter '+Se+' sekunder '+Ms+' hundrededele ';
Avatar billede sorenmt84 Juniormester
23. april 2008 - 14:04 #6
det viker fint på hundrededele, men ikke på sekunder. På minutter og timer har jeg ikke set, da det ikke lige passer med under 9 lige nu :-)
Avatar billede sorenmt84 Juniormester
23. april 2008 - 14:10 #7
Så virker det... Timer og minutter er som det skal være... Sekunder manglede følgende linje bare:
  Se = Se<10 ? "0"+Se : Se;

Hvis du lige har det siddende til højrebenet, kan du så svare på om jeg kan lave noget ligende med teksten der skal stå, men bare hvis tallet er = 1 så der så står "time" i stedet for "timer" osv.
Avatar billede w13 Novice
23. april 2008 - 14:15 #8
Nej, det er rigtigt.

Ret:

S = S<10 ? "0"+S : S;

til:

S = S<10 ? "0"+S : S;
Se = Se<10 ? "0"+Se : Se;
Avatar billede w13 Novice
23. april 2008 - 14:16 #9
Ja, det fikser jeg lige. 2 sek. :)
Avatar billede w13 Novice
23. april 2008 - 14:17 #10
Temp = T+' timer '+M+ ' minutter '+Se+' sekunder '+Ms+' hundrededele ';

skal så være:

Temp = T+' time'+(T=='01'?'':'r')+' '+M+ ' minutte'+(M=='01'?'':'r')+' ' '+Se+' sekunde'+(S=='01'?'':'r')+' ' '+Ms+' hundrededel'+(T=='01'?'':'e')+' ' ';
Avatar billede sorenmt84 Juniormester
23. april 2008 - 14:41 #11
Får fejl om at object exected
Avatar billede w13 Novice
23. april 2008 - 15:12 #12
Ja, der sneg sig for mange apostroffer ind:

Temp = T+' time'+(T=='01'?'':'r')+' '+M+ ' minutte'+(M=='01'?'':'r')+' '+Se+' sekunde'+(S=='01'?'':'r')+' '+Ms+' hundrededel'+(T=='01'?'':'e')+' ';
Avatar billede roenving Novice
28. april 2008 - 15:17 #13
-- og så kan det da anbefales at lave en generel funktion, der gør det:

function twoDigits(num){
  return num<10 ? "0" + num : num;
}

-- så bliver din kode en del kortere:

  T = twoDigits(Math.floor(S / (60*60*1000)));
  S = S - (T * (60*60*1000));
  M = twoDigits(Math.floor(S / (60*1000)));
  S = S - (M * (60*1000));
  Se = twoDigits(Math.floor(S/1000));
  S = S - (Se * 1000);
  Ms = Math.floor(S / 10);
  Ms = Ms<10 ? "00"+Ms : Ms<100 ? "0" + Ms : Ms;//Ms skal jo være tre-cifrede !-)
Avatar billede mrbigbrother Nybegynder
21. maj 2008 - 13:27 #14
jeg kan ikke få denne kode til at virke når jeg ligger den op på min ftp server. Der bliver bare vist en tom hvid side i min browser når jeg er på siden.

<HTML>
<HEAD>
    <title>hej</title>
<script language="JavaScript">
ie = document.all
nn = document.layers

function CountDown()
{
  var nu = new Date();
  var Totusind = new Date(2008, 3, 27, 00, 00, 1);
  var S = Totusind.getTime() - nu.getTime();
  var T, M, Se, Ms;
  = Math.floor(S / (60*60*1000));
  T = T<10 ? "0"+T : T;
  S = S - (T * (60*60*1000));
  M = Math.floor(S / (60*1000));
  M = M<10 ? "0"+M : M;
  S = S - (M * (60*1000));
  Se = Math.floor(S/1000);
  S = S - (Se * 1000);
  S = S<10 ? "0"+S : S;
  Se = Se<10 ? "0"+Se : Se;
  Ms = Math.floor(S / 10);
  Ms = Ms<10 ? "0"+Ms : Ms;
  Temp = T+' timer '+M+ ' minutter '+Se+' sekunder '+Ms+' hundrededele ';
  if (ie) {tid.innerHTML=Temp;}
  else {document.tid.document.write(Temp); document.tid.document.close()}
  setTimeout ("CountDown()", 1);
}

function Init()
{
  setTimeout ("CountDown()", 1);
}

</script>
<BODY onLoad="Init()">
<SCRIPT LANGUAGE="JavaScript">
<!--
if (ie) {document.write('<DIV ID="tid"></DIV>')}
else{document.write('<layer id="tid" width=350 height=10></layer>')}
//-->
</SCRIPT>

</BODY>
</HTML>
Avatar billede w13 Novice
21. maj 2008 - 13:32 #15
Ok? Den bør nok optimeres/opdateres lidt i øvrigt:
***************************************
<html>
<head>
<title>hej</title>
<script type="text/javascript">
function CountDown(){
  var nu = new Date();
  var Totusind = new Date(2008, 3, 27, 00, 00, 1);
  var S = Totusind.getTime() - nu.getTime();
  var T, M, Se, Ms;
  = Math.floor(S / (60*60*1000));
  T = T<10 ? "0"+T : T;
  S = S - (T * (60*60*1000));
  M = Math.floor(S / (60*1000));
  M = M<10 ? "0"+M : M;
  S = S - (M * (60*1000));
  Se = Math.floor(S/1000);
  S = S - (Se * 1000);
  S = S<10 ? "0"+S : S;
  Se = Se<10 ? "0"+Se : Se;
  Ms = Math.floor(S / 10);
  Ms = Ms<10 ? "0"+Ms : Ms;
  Temp = T+' timer '+M+ ' minutter '+Se+' sekunder '+Ms+' hundrededele ';
  tid.firstChild.nodeValue=Temp;
  setTimeout("CountDown()",30);
}

function Init(){
  CountDown()
}

</script>
<body onload="Init()">

<div id="tid">&nbsp;</div>

Test

</body>
</html>

Og hvis den stadig ikke viser noget overhovedet, så har du ikke lagt den rigtigt op. =)
Den skulle gerne i det mindste vise ordet "Test".
Avatar billede mrbigbrother Nybegynder
21. maj 2008 - 13:43 #16
tak for det hurtige svar..

den viser selvfølgelig ordet test nu men stadig ikke counteren?
Avatar billede w13 Novice
21. maj 2008 - 13:47 #17
tid.firstChild.nodeValue=Temp;
skal nok være:
document.getElementById("tid").firstChild.nodeValue=Temp;

;)

I øvrigt skal:
= Math.floor(S / (60*60*1000));
nok være:
T = Math.floor(S / (60*60*1000));
Avatar billede mrbigbrother Nybegynder
21. maj 2008 - 14:15 #18
nu spytter den der her ud i min browser..

0-591 timer NaN minutter NaN sekunder NaN hundrededele
Test
Avatar billede w13 Novice
21. maj 2008 - 14:19 #19
Vis lige hele din kode, som den ser ud nu.
Avatar billede mrbigbrother Nybegynder
21. maj 2008 - 14:25 #20
sorry det er selvfølgelig fordi den skal have den ny dato og tælle ned til"!

mange tak for hjælpen :)
Avatar billede w13 Novice
21. maj 2008 - 14:36 #21
;)
Avatar billede mrbigbrother Nybegynder
21. maj 2008 - 14:42 #22
ved du hvad jeg skal gøre hvis jeg også vil have at den skal tælle dage?
Avatar billede roenving Novice
21. maj 2008 - 17:09 #23
Kig f.eks. på http://roenving.users.whitehat.dk/date/roenvingDate.html og prøv at indsætte en dato i fremtiden i Referencefeltet, f.eks. 2008,5,1 (1/6-2008 -- javascript tæller måneder fra 0 til 11 !-)
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