Avatar billede madsens90 Praktikant
27. april 2008 - 15:53 Der er 41 kommentarer og
1 løsning

Countdown med dage, timer og sekunder!

Nu har jeg ledt i en time, og kan ikke finde et script der passer til mine behov, eller som jeg lige kan finde ud af at lave om på, efter mine behov, så måske der var nogle der kunne hjælpe?

Jeg skal bruge et countdown script der henter et x antal sekunder fra min DB, og derefter smider den ind i en countdown med dage, timer og sekunder. Når den har nået 0 sekunder tilbage, skal den opdaterer siden.

Mange tak for din/jeres tid!
Avatar billede w13 Novice
28. april 2008 - 10:54 #1
Jeg fandt denne:


countdown.js:
----------------------------------
/*
Author: Robert Hashemian
http://www.hashemian.com/

You can use this code in any manner so long as the author's
name, Web address and this disclaimer is kept intact.
*/

function calcage(secs, num1, num2) {
  s = ((Math.floor(secs/num1))%num2).toString();
  if (LeadingZero && s.length < 2)
    s = "0" + s;
  return "<b>" + s + "</b>";
}

function CountBack(secs) {
  if (secs < 0) {
    document.getElementById("cntdwn").innerHTML = FinishMessage;
    return;
  }
  DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs,86400,100000));
  DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs,3600,24));
  DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs,60,60));
  DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs,1,60));

  document.getElementById("cntdwn").innerHTML = DisplayStr;
  if (CountActive)
    setTimeout("CountBack(" + (secs+CountStepper) + ")", SetTimeOutPeriod);
}

function putspan(backcolor, forecolor) {
document.write("<span id='cntdwn' style='background-color:" + backcolor +
                "; color:" + forecolor + "'></span>");
}

if (typeof(BackColor)=="undefined")
  BackColor = "white";
if (typeof(ForeColor)=="undefined")
  ForeColor= "black";
if (typeof(TargetDate)=="undefined")
  TargetDate = "12/31/2020 5:00 AM";
if (typeof(DisplayFormat)=="undefined")
  DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
if (typeof(CountActive)=="undefined")
  CountActive = true;
if (typeof(FinishMessage)=="undefined")
  FinishMessage = "";
if (typeof(CountStepper)!="number")
  CountStepper = -1;
if (typeof(LeadingZero)=="undefined")
  LeadingZero = true;


CountStepper = Math.ceil(CountStepper);
if (CountStepper == 0)
  CountActive = false;
var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990;
putspan(BackColor, ForeColor);
var dthen = new Date(TargetDate);
var dnow = new Date();
if(CountStepper>0)
  ddiff = new Date(dnow-dthen);
else
  ddiff = new Date(dthen-dnow);
gsecs = Math.floor(ddiff.valueOf()/1000);
CountBack(gsecs);
--------------------------------------------
fil.htm:
--------------------------------------------
<script type="text/javascript">
TargetDate = "12/31/2020 5:00 AM";
BackColor = "white";
ForeColor = "white";
CountActive = true;
CountStepper = -1;
LeadingZero = true;
DisplayFormat = "%%D%% dage, %%H%% timer, %%M%% minutter, %%S%% sekunder.";
FinishMessage = "<script type='text/javascript'>window.location.reload(true)</script>";
</script>
<script language="JavaScript" src="countdown.js"></script>
Avatar billede w13 Novice
28. april 2008 - 10:54 #2
Så skal du bare hente datoen til variablen TargetDate.
Avatar billede madsens90 Praktikant
28. april 2008 - 16:02 #3
Det ser lækkert ud, men som jeg har prøvet at beskrive i "beskrivelsen" af mit problem, så henter den et x antal sekunder fra databasen..

Nu er jeg langt fra javascript expert, men hvis jeg indatster f.eks 610 sekunder i "TargetDate" så kan den da ikke selv finde ud af at det er 10 min, ogg 10 sek ? :)
Avatar billede w13 Novice
28. april 2008 - 16:04 #4
Nej, det er rigtigt. Æv.
Avatar billede roenving Novice
28. april 2008 - 16:08 #5
Hvor store kan dine intervaller være ?-)

-- for det kan relativt nemt laves, hvis de er ret simple !-)
Avatar billede madsens90 Praktikant
28. april 2008 - 16:20 #6
altså hvis du tænker på hvor stort tidspunktet kan være, så kan det lige nu være fra 10 timer og ned.

Det vil sige 36000 sekunder.

Men det kan godt være jeg senere laver sådan at det kan være den kommer op på flere dage som f.eks 5 dage, som er = 432000 sekunder. :)

(Hvis det var det du mente roenving?)
Avatar billede roenving Novice
28. april 2008 - 16:39 #7
Ja, det var det, jeg mente, men hvis du altid har det i sekund-format kan du feks.:

<script type="text/javascript">
var slut = 610, cTimer;
function showTime(){
  var txt = "", tmp = slut;
  if(tmp > 86400){
    txt += twoDigits(Math.floor(tmp/86400))+ " dag(e), ";
    tmp %= 86400;
  }
  if(txt || tmp > 3600){
    txt += twoDigits(Math.floor(tmp/3600)) + " time(r), ";
    tmp %= 3600;
  }
  if(txt || tmp > 60){
    txt += twoDigits(Math.floor(tmp/60)) + " minut(ter) og ";
    tmp %= 60;
  }
  txt += twoDigits(tmp) + " sekund(er)";
  document.getElementById("visTid").firstChild.nodeValue = txt;
  if(slut == 0){
    clearInterval(cTimer);
    //Hvad du vil, når den er nul
  }
  slut--;
}
function twoDigits(num){
  return num<10 ? "0" + num : num;
}
window.onload = function(){
  showTime();
  cTimer = setInterval("showTime()",1000);
}
</script>

<span id="visTid">&nbsp;</span>
Avatar billede roenving Novice
28. april 2008 - 16:39 #8
-- og formatteringen er blot et eksempel, der kan laves mange hundekunster med den !-)
Avatar billede roenving Novice
28. april 2008 - 16:43 #9
-- og så fandt jeg lige ud af, at jeg havde overset en detalje, sammenligningerne skal være >=, f.eks.

tmp >= 60
Avatar billede madsens90 Praktikant
28. april 2008 - 17:27 #10
Roenving: Det virker jo som det skal! :D
Det er lækkert sådan noget.

Hvis jeg vil have den til at refreshe siden ved 0, skal jeg så skrive sådan her:

  if(slut == 0){
    clearInterval(cTimer);
  window.location.reload(true)
  }

??

roenving, kom med et svar, og få dine point. ;)
Avatar billede roenving Novice
28. april 2008 - 17:29 #11
Præcis !-)

Velbekomme '-)
Avatar billede madsens90 Praktikant
28. april 2008 - 17:31 #12
Jeg takker endnu engang! ::)
Avatar billede roenving Novice
28. april 2008 - 17:42 #13
-- og jeg takker for point ;~}
Avatar billede madsens90 Praktikant
28. april 2008 - 20:12 #14
Jeg må have klokket i det, men jeg troede af jeg ud af dette:

20080428204200          (2008 - 04/28 Kl. 20:42:00)
-
20080428200733          (2008 - 04/28 Kl. 20:07:33)
=
3467

kunne få dage, min sekunder osv..
Jeg har brugt date("YmdHis") til at gemme årstal,dato, og tidspunkt i min db.
Hva skal jeg bruge for at få det i sekunder? :)
Avatar billede roenving Novice
28. april 2008 - 20:18 #15
Kan du ikke bare splitte og med mkdate lave det til et dato-objekt ?-)
Avatar billede madsens90 Praktikant
28. april 2008 - 20:20 #16
Du skulle du vel ikke gide at give et eksempel på? :)

Selvom at der ikke ligger point i det? :)
Avatar billede madsens90 Praktikant
28. april 2008 - 20:52 #17
Jeg kan vel oprette en ny tråd, og gi dig point for det, hvis du gerne vil have point? ;)
Avatar billede roenving Novice
28. april 2008 - 21:03 #18
Jeg kan kun vise det i java script:

var t = ["20080428204200","20080428200733"];
var d = [];
for(i=0;1>=i;i++){
  var u = t[i].split("");
  d[i] = new Date( +(u[0]+u[1]+u[2]+u[3]), +(u[4]+u[5])-1, +(u[6]+u[7]), +(u[8]+u[9]), +(u[10]+u[11]), +(u[12]+u[13]));
}
var diff = (d[0].getTime() - d[1].getTime())/1000;
alert(diff);

-- og det viser sig at være 2067 s. !-)

-- og i ovenstående splitter jeg hele tekst-strengen op i de enkelte cifre, bruger de første 4 til år, de næste 2 til måned osv.

-- bemærk nogle specialiteter, som ikke nødvendigvis er til rådighed i dit server-side script:

+( u[10]+u[11] ) //her konkatenerer jeg først de to cifre i minut-tallet, og derefter konverterer jeg til et tal ...

+( u[4]+u[5] ) - 1 //konkatenering af cifrene i månedstallet, konvertering til tal, og derefter fratrækning af 1, så det matcher javascripts måde at repræsentere måneder i Date-objekter (0-11, 0 er januar, 11 er december !-)

-- og javascript bruger gundlæggende millisekunder, derfor divisionen med 1000 !o]
Avatar billede madsens90 Praktikant
28. april 2008 - 21:21 #19
Hvordan skal jeg så skrive disse linier:

var t = ["<? echo "$opdateringstid"; ?>","<? echo "$dato_og_tid"; ?>"];

&

var slut = t, cTimer; (Den øverste linie fra countdown scriptet)

du kan som sagt se jeg har forsøgt mig ad. ;)
Skal jeg oprette en tråd så du kan få point?
Avatar billede roenving Novice
28. april 2008 - 21:26 #20
Tjah, så kan du f.eks.

<script type="text/javascript">
var t = ["<? echo "$opdateringstid"; ?>","<? echo "$dato_og_tid"; ?>"];
var d = [];
for(i=0;1>=i;i++){
  var u = t[i].split("");
  d[i] = new Date( +(u[0]+u[1]+u[2]+u[3]), +(u[4]+u[5])-1, +(u[6]+u[7]), +(u[8]+u[9]), +(u[10]+u[11]), +(u[12]+u[13]));
}

var slut = (d[0].getTime() - d[1].getTime())/1000, cTimer;
function showTime(){

//osv.
Avatar billede madsens90 Praktikant
28. april 2008 - 21:27 #21
Nåår jah! skulle sefølgelig bruge "diff".. ;)
sry! :D

Kan man godt skrive f.eks:

$diff = diff; i ens javascript, så man kan bruge $diff til noget andet? :)
Avatar billede madsens90 Praktikant
28. april 2008 - 21:28 #22
Jeg skrev bare:

var slut = diff, cTimer;

;)
Avatar billede roenving Novice
28. april 2008 - 21:29 #23
Jepz !-)
Avatar billede madsens90 Praktikant
28. april 2008 - 21:37 #24
Du kan gå herind og få point:
http://www.eksperten.dk/spm/829569
;)
Avatar billede madsens90 Praktikant
01. maj 2008 - 14:06 #25
Hvordan får jeg det nederste af det her til at virke? ;D

<?
echo '<script type="text/javascript">
var t = ["$dato_og_tid","$opdateringstid"];
var d = [];
for(i=0;1>=i;i++){
  var u = t[i].split("");
  d[i] = new Date( +(u[0]+u[1]+u[2]+u[3]), +(u[4]+u[5])-1, +(u[6]+u[7]), +(u[8]+u[9]), +(u[10]+u[11]), +(u[12]+u[13]));
}
var diff = (d[0].getTime() - d[1].getTime())/1000;

$diff = diff;

</script>
';

echo "$diff";
?>

Sådan så jeg kan bruge $diff til noget andet? :)
Avatar billede roenving Novice
01. maj 2008 - 14:37 #26
F.eks. sådan:

<?
echo '<script type="text/javascript">
var diff;
var t = ["$dato_og_tid","$opdateringstid"];
var d = [];
for(i=0;1>=i;i++){
  var u = t[i].split("");
  d[i] = new Date( +(u[0]+u[1]+u[2]+u[3]), +(u[4]+u[5])-1, +(u[6]+u[7]), +(u[8]+u[9]), +(u[10]+u[11]), +(u[12]+u[13]));
}
diff = (d[0].getTime() - d[1].getTime())/1000;
</script>
';

?>

-- så kan du bruge diff i andre scripts på siden, skal du bruge det til dit script serverside, kan det bedst betale sig at lave beregningen på serveren !-)
Avatar billede madsens90 Praktikant
02. maj 2008 - 00:08 #27
Det er fordi at jeg lige neden under vil lave noget hvor jeg skal skrive noget lign:

if ($diff > 60) {

osv.
osv.
}

Så hvordan forslår du jeg gør det? :)
Avatar billede roenving Novice
03. maj 2008 - 01:06 #28
Skal du lave det på serveren ?-)
Avatar billede madsens90 Praktikant
03. maj 2008 - 12:27 #29
Jeg er ikke sikker på hvad du mener, for hvor kan man ellers lave det? :)

Jeg skal lave det i et php dokument som er tilføjet til samtlige sider på min hjemmeside, da det skal bruges hver gang man opdaterer siden. :)
Avatar billede madsens90 Praktikant
04. maj 2008 - 21:13 #30
Note:

jeg skal lave så den skal opdaterer min DB i php, hvis diff > 60..

Derfor jeg skal bruge: (eksempelvis)


if ($diff > 60) {

MYSQL_QUERY("UPDATE table SET kolonne = '' WHERE `` = ''") or die(mysql_error());

}

:)
Avatar billede madsens90 Praktikant
04. maj 2008 - 22:27 #31
Kunne være lækkert hvis en havde et svar. :P hehe, for er gået lidt i stå med mit projekt pga det. :-)
Avatar billede roenving Novice
05. maj 2008 - 00:19 #32
Hvis du skal bruge tallet serverside, skal du beregne det serverside og så sende det som færdig variabel til browseren ...


$diff = 0;

/* Beregning af $diff udfra $dato_og_tid og $opdateringstid */
echo "
<script type='text/javascript'>
var diff = $diff;
</script>";
if ($diff > 60) {

MYSQL_QUERY("UPDATE table SET kolonne = '' WHERE `` = ''") or die(mysql_error());

}
Avatar billede madsens90 Praktikant
05. maj 2008 - 12:12 #33
Det ser godt nok lækkert ud! :)

Glæder mig til at teste det efter skole! :)
Avatar billede madsens90 Praktikant
05. maj 2008 - 16:16 #34
//opdatering af solgte produkter, firma værdi, antal kr

$name = $session->username;
$dato_og_tid = date("YmdHis");
          $sql = "SELECT * FROM tf_produkter WHERE `username` = '$name' LIMIT 1";
          $result = mysql_query($sql);
          while($opdateringer = @mysql_fetch_array($result)){
         
    $opdateringstid = $opdateringer[opdateringstid];

$diff = 0;
   
?>
<script type="text/javascript">
var diff;
var t = ["<? echo"$dato_og_tid"; ?>","<? echo"$opdateringstid"; ?>"];
var d = [];
for(i=0;1>=i;i++){
  var u = t[i].split("");
  d[i] = new Date( +(u[0]+u[1]+u[2]+u[3]), +(u[4]+u[5])-1, +(u[6]+u[7]), +(u[8]+u[9]), +(u[10]+u[11]), +(u[12]+u[13]));
}
diff = (d[0].getTime() - d[1].getTime())/1000;

</script>
<?
/* Beregning af $diff udfra $dato_og_tid og $opdateringstid */
?>
<script type='text/javascript'>
var diff = <? echo "$diff"; ?>;

alert(<? echo "$diff"; ?>);
</script>
<?
if ($diff > 60) {

Nu ser det sådan der ud. :)
Kan du se hvorfor det ikke virker?
Den viser bare tallet er $diff = 0, i den alert jeg har sat ind? :/
Avatar billede madsens90 Praktikant
05. maj 2008 - 16:18 #35
Grunden til at jeg har ikke bare lavet en echo rund om javascripten, er fordi at så virker javascripten åbenbart ikke.
Avatar billede roenving Novice
05. maj 2008 - 16:22 #36
Jepz, javascriptet vil jo først køre, når det rammer browseren, og inden da er $diff jo bare det tal, den er initialiseret til !-)
Avatar billede madsens90 Praktikant
05. maj 2008 - 16:33 #37
Så det vil sige at $diff i en alert = 0,
men lige nedenunder hvor der står:

if ($diff >60) {

der er $diff ikke længere 0= :)
Avatar billede madsens90 Praktikant
06. maj 2008 - 10:12 #38
Det vil stadig ikke virke.. :/

Det ser stadig ud som det gjorde i mit indlæg her: 05/05-2008 16:16:53
Avatar billede madsens90 Praktikant
07. maj 2008 - 18:17 #39
Den bliver bare ved med at læse $diff som 0..

Du kan ikke se hvad jeg skal gøre hvis det ser ud som i det indlæg jeg skrev på det tidspunkt som skrevet i min besked herover?
Avatar billede roenving Novice
08. maj 2008 - 11:43 #40
Jamen, scriptet skal jo afvikles før php-delen kører, altså må du køre det på serveren som en del af php-koden, og altså ikke som javascript på klienten ?-)
Avatar billede madsens90 Praktikant
08. maj 2008 - 17:35 #41
Ville være super duper dejligt hvis du gad vise mig hvordan ? :-P
Avatar billede roenving Novice
09. maj 2008 - 16:30 #42
Ja, men nu er jeg jo ikke lige haj til php (selv om syntaksen ligner js næsten til forveksling !-)

-- så du må nok stille spørgsmålet videre under php !-)
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