Avatar billede danic Nybegynder
10. maj 2003 - 21:50 Der er 16 kommentarer og
2 løsninger

Hvordan laver man en tæller som tæller ned til en given dato?

Hvordan laver man en tæller, som tæller ned til en given dato?

$Releasedate = 06-06-2003;

Tælleren skal køre hele tiden, således at der står:
x date, timer:minutter:sekunder (ikke kun ved reload).
Avatar billede Slettet bruger
10. maj 2003 - 21:52 #1
det skal gøres med JavaScript
Avatar billede Slettet bruger
10. maj 2003 - 21:53 #2
<html>
<head>
<style>
span {
color: red;
}
</style>
<script>
datoned = new Date(2003, 10, 26, 0, 0, 0); //Datoen i fremtiden (her d. 3/9-2003 kl 00:00:00). Månednummeret skal være én mindre
datoop = new Date(2003, 0, 1, 0, 0, 0);

function tael() {
nu = new Date();

//Tæl ned

nt = datoned.getTime() - nu.getTime();
d = Math.ceil(nt / (1000 * 60 * 60 * 24));
t = Math.ceil(nt / (1000 * 60 * 60));
m = Math.ceil(nt / (1000 * 60));
s = Math.ceil(nt / 1000);
sd = Math.floor(nt / (1000 * 60 * 60 * 24));
st = Math.floor((nt % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
sm = Math.floor(((nt % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) / (1000 * 60)); //Et uheldigt navn til en variabel...
ss = Math.floor((((nt % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) % (1000 * 60)) / 1000); //Et til!
str = sd + ((sd == 1) ? " dag, " : " dage, ") + st + ((st == 1) ? " time, " : " timer, ") + sm + ((sm == 1) ? " minut, og " : " minutter, og ") + ss + ((ss == 1) ? " sekund." : " sekunder.");
getObj("dage").innerHTML = d;
getObj("timer").innerHTML = t;
getObj("min").innerHTML = m;
getObj("sek").innerHTML = s;
getObj("samlet").innerHTML = str;

//Tæl op

nt = nu.getTime() - datoop.getTime();
d = Math.ceil(nt / (1000 * 60 * 60 * 24));
t = Math.ceil(nt / (1000 * 60 * 60));
m = Math.ceil(nt / (1000 * 60));
s = Math.ceil(nt / 1000);
sd = Math.floor(nt / (1000 * 60 * 60 * 24));
st = Math.floor((nt % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
sm = Math.floor(((nt % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) / (1000 * 60));
ss = Math.floor((((nt % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) % (1000 * 60)) / 1000);
str = sd + ((sd == 1) ? " dag, " : " dage, ") + st + ((st == 1) ? " time, " : " timer, ") + sm + ((sm == 1) ? " minut, og " : " minutter, og ") + ss + ((ss == 1) ? " sekund." : " sekunder.");
getObj("dageop").innerHTML = d;
getObj("timerop").innerHTML = t;
getObj("minop").innerHTML = m;
getObj("sekop").innerHTML = s;
getObj("samletop").innerHTML = str;

setTimeout("tael();", 1000);
}

function getObj(id) {
if (document.getElementById)
return document.getElementById(id);
if (document.all)
return document.all[id];
}
</script>
</head>
<body onLoad="tael();">
<h3>Tid til d. 26/11-2003</h3>
<br>
<b>Dage:</b> <span id="dage"></span><br>
<b>Timer:</b> <span id="timer"></span><br>
<b>Minutter:</b> <span id="min"></span><br>
<b>Sekunder:</b> <span id="sek"></span><br><br>
<span id="samlet"></span>
<br><br>
<h3>Tid fra d. 1/1-2003</h3>
<br>
<b>Dage:</b> <span id="dageop"></span><br>
<b>Timer:</b> <span id="timerop"></span><br>
<b>Minutter:</b> <span id="minop"></span><br>
<b>Sekunder:</b> <span id="sekop"></span><br><br>
<span id="samletop"></span>
</body>
</html>
Avatar billede danic Nybegynder
10. maj 2003 - 21:53 #3
$Releasedate er et felt i MySQL som tages ud med PHP, kan den værdi gemmes til brug for javascript?
Avatar billede roenving Novice
10. maj 2003 - 21:54 #4
Lidt simplere. tror jeg:

<html>
<head>
<title>TÆLLERNE</title>
<script language="javascript">

var snart = new Date(2003,4,30);
var snartmsek = snart.getTime();

function startTael() {
  nu = new Date();
  msek = snartmsek - nu.getTime();
  var sek = Math.floor(msek/1000);
  var min = Math.floor(sek/60);
  var tim = Math.floor(min/60);
  var dg = Math.floor(tim/24);
  sek = sek%60;
  min = min%60;
  tim = tim%24;
  document.tform.t2.value = "" + dg + " dg. " + tim + " t. " + min + " min. " + sek + " sek.";
}

</script>
</head>

<body onload='setInterval(startTael,1000);'>
<form name="tform">
Tæl ned: <input type=text name="t2">
</form></body>
</html>


hth
jes
Avatar billede Slettet bruger
10. maj 2003 - 21:56 #5
hehe...man piller naturligvis det ud af min stjålne kode som man ikke har brug for. Jeg gad bare ikke selv gøre det ;)
Avatar billede roenving Novice
10. maj 2003 - 21:57 #6
Datoen angives i denne:

var snart = new Date(2003,4,30); // 30/5-2003 NB! måned minus 1
Avatar billede danic Nybegynder
10. maj 2003 - 21:59 #7
roenving> kan den forstår en php variabels værdi?
Avatar billede roenving Novice
10. maj 2003 - 22:11 #8
Jamen du sætter da bare værdierne ind via dit PHP-script, noget à la:

var snart = new Date(<%$aar%>,<%maned%>,<%dag%>);

eller sådan noget -- PHP ka' jeg ikke ...
Avatar billede Slettet bruger
10. maj 2003 - 22:18 #9
hvis du vil bruge roenvings:


<?
$Releasedate = "06-06-2003";
$arr = explode("-",$Releasedate);
?>
<script>
var snart = new Date(<? echo $arr[2]; ?>,<? echo $arr[0]; ?>,<? echo $arr[1]; ?>);
Avatar billede roenving Novice
10. maj 2003 - 22:19 #10
Det der med PHP ses tydeligt, ihvertfald manglede der lige nogle $'er:

var snart = new Date(<%$aar%>,<%$maned%>,<%$dag%>);

Iøvrigt tror jeg nok at PHP-variabler og javascript-variabler er meget nemme at udveksle, men vi må lige have fat på een, der _ved_ det !-)
Avatar billede roenving Novice
10. maj 2003 - 22:22 #11
Så må vi lige have lidt mere med (og husk måned -1):

var snart = new Date(parseInt(<? echo $arr[2]; ?>, 10), parseInt(<? echo $arr[0]; ?>, 10) - 1, parseInt(<? echo $arr[1]; ?>, 10));
Avatar billede roenving Novice
10. maj 2003 - 22:23 #12
Det er det med at datoer kan indeholde nuller først, så oversætter javascript jo til øeh ... var det oktal-værdier ?-|
Avatar billede danic Nybegynder
10. maj 2003 - 22:38 #13
Perfekt, tak for hjælpen :)

Lige en sidste ting:
Kan man få den til at skrive "udløbet" i form boksen når tiden er overskredet?
Avatar billede roenving Novice
10. maj 2003 - 22:43 #14
Ja, sådan her:

function startTael() {
  nu = new Date();
  if (nu > snart){
    document.tform.t2.value = "Udløbet!";
    return;
  }
  msek = snartmsek - nu.getTime();

altså inde midt i koden ;-)
Avatar billede danic Nybegynder
10. maj 2003 - 22:48 #15
Hvis jeg sætter den ind således: så bliver formen helt blank selv om den ikke er udløbet.

<script language="javascript">

var snart = new Date(parseInt(<? echo $arr[2]; ?>, 10), parseInt(<? echo $arr[0]; ?>, 10) - 1, parseInt(<? echo $arr[1]; ?>, 10));
var snartmsek = snart.getTime();

function startTael() {
nu = new Date();
msek = snartmsek - nu.getTime();
var sek = Math.floor(msek/1000);
var min = Math.floor(sek/60);
var tim = Math.floor(min/60);
var dg = Math.floor(tim/24);
sek = sek%60;
min = min%60;
tim = tim%24;
document.tform.t2.value = "" + dg + " dg. " + tim + " t. " + min + " min. " + sek + " sek.";
}

function startTael() {
nu = new Date();
if (nu > snart){
document.tform.t2.value = "Udløbet!";
return;
}
msek = snartmsek - nu.getTime();

</script>
Avatar billede roenving Novice
10. maj 2003 - 22:48 #16
Vi skulle nok også fjerne gentagelsen af kaldet, så:


<html>
<head>
<title>TÆLLERNE</title>
<script language="javascript">

var idInt;

var snart = new Date(parseInt(<? echo $arr[2]; ?>, 10), parseInt(<? echo $arr[0]; ?>, 10) - 1, parseInt(<? echo $arr[1]; ?>, 10));
var snartmsek = snart.getTime();

function startTael() {
  nu = new Date();
  if (nu > snart){
    document.tform.t2.value = "Udløbet!";
    clearInterval(idInt);
    return;
  }
  msek = snartmsek - nu.getTime();

  var sek = Math.floor(msek/1000);
  var min = Math.floor(sek/60);
  var tim = Math.floor(min/60);
  var dg = Math.floor(tim/24);
  sek = sek%60;
  min = min%60;
  tim = tim%24;
  document.tform.t2.value = "" + dg + " dg. " + tim + " t. " + min + " min. " + sek + " sek.";
}

</script>
</head>

<body onload='idInt=setInterval(startTael,1000);'>
<form name="tform">
Tæl ned: <input type=text name="t2">
</form></body>
</html>
Avatar billede danic Nybegynder
10. maj 2003 - 23:00 #17
Kanon!
Avatar billede roenving Novice
10. maj 2003 - 23:06 #18
Bingo '-)

-- og takker for points ;~}
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