Avatar billede jammerlab Nybegynder
11. januar 2008 - 17:46 Der er 21 kommentarer og
3 løsninger

Live nedtælling med PHP?

Hej derude...

kan man lave en live nedtælling med PHP indblandet??

Tænker på at den skal tage tiden fra scriptet loades til en given tid som jeg sender til den igennem PHP'en... nogen idéer?
Avatar billede w13 Novice
11. januar 2008 - 17:49 #1
PHP udføres jo serverside, så selve scriptet, der tæller, bør nok være JavaScript. Men du kan muligvis bruge PHP til at finde tidspunktet, hvis det skal være efter serverens ur og ikke brugerens.
Avatar billede jammerlab Nybegynder
11. januar 2008 - 17:50 #2
Og jeg havde selvf. tænkt mig at JS skulle gøre den live nedtælling mulig ;)
Avatar billede w13 Novice
11. januar 2008 - 17:53 #3
:)
Avatar billede jammerlab Nybegynder
11. januar 2008 - 17:56 #4
Hvis du har noget jeg kan bruge må du meget gerne fyrre det af :P Men helst ikke de der kilometer lange JS scripts jeg har set nogle steder... den skal bare vise sekunder.. minutter eller timer alt efter hvad der er tilbage..
Avatar billede w13 Novice
11. januar 2008 - 18:02 #5
Det har jeg ikke desværre. Så undskyld, at jeg spammer dit spørgsmål. :) Troede jeg kunne finde noget, men det kunne jeg ikke umiddelbart.
Avatar billede w13 Novice
11. januar 2008 - 18:13 #6
Jeg kunne kun finde dette her kilometerlange script:
----------------------------------------------------------
<script type="text/javascript" language="javascript">
TargetDate="12/31/2020 5:00 AM";
BackColor="palegreen";
ForeColor="navy";
CountActive=true;
CountStepper=-1;
LeadingZero=true;
DisplayFormat="%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
FinishMessage="It is finally here!";

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)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);
</script>
Avatar billede w13 Novice
11. januar 2008 - 18:14 #7
Der er selvfølgelig lidt med nogle farver og sådan noget også som kan skæres fra.
Avatar billede jammerlab Nybegynder
11. januar 2008 - 18:27 #8
mangler der noget? Jeg for ikke rigtigt noget output...
Avatar billede w13 Novice
11. januar 2008 - 19:09 #9
Jo, jeg får den heller ikke til at virke.. Hmm.
Avatar billede w13 Novice
11. januar 2008 - 19:36 #10
Olebole gav lige en anden spørger denne kode, så jeg:
-----------------------------------------------
<script type="text/JavaScript">
// 11. januar kl. 19:32:10:100
var oDate = new Date(2008, 0, 11, 19, 33, 10, 100);

function countDown() {
    clearTimeout(nTimer);
    var nDif = oDate-new Date();
    var nMin = Math.floor(nDif/60000);
    var sMin = nMin<0 ? "00" : nMin<10 ? "0"+nMin : nMin;
    nDif = nDif%60000;
    var nSec= Math.ceil(nDif/1000);
    var sSec = nSec<0? "00" : nSec<10 ? "0"+nSec : nSec;
    var nMil = nDif%1000;
    var sMil = nMil<0 ? "000" : nMil<10 ? "00"+nMil : nMil<100 ? "0"+nMil : nMil
    oDispl.firstChild.nodeValue = sMin + " : " + sSec + " : " + sMil;
    if (nMin<1 && nSec<1 && nMil<1) return foo(); // Nedtællingen er slut
    nTimer = setTimeout("countDown()", 30);
}
function foo() {
    alert("Nedtælling slut")
}

var oDispl = nTimer = null;
window.onload = function() {
    oDispl = document.getElementById("timerDispl");
    countDown();
}
</script>

<span id="timerDispl" style="font:bold 20px tahoma">&nbsp;</span>
Avatar billede olebole Juniormester
11. januar 2008 - 22:09 #11
<ole>

- og jeg skrev en forkert kommentar. Den skulle lyde:
    // 11. januar kl. 19:33:10:100
    var oDate = new Date(2008, 0, 11, 19, 33, 10, 100);

Formen for tidspunktet er:
    var oDate = new Date(år, måned*, dag, time, minut, sekund, millisekund);

*) bemærk, at månederne går fra 0 til 11 - med januar som 0 og december som 11

/mvh
</bole>
Avatar billede jammerlab Nybegynder
12. januar 2008 - 16:21 #12
Er der nogen måde man kan få timer med? Lige nu skriver den en masse minutter... ellers er det lige hvad jeg søger
Avatar billede roenving Novice
12. januar 2008 - 17:33 #13
...
    var nDif = oDate-new Date();
    var nTim = Math.floor(nDif/3600000);
    var sTim = nTim<0 ? "00" : nTim<10 ? "0"+nTim : nTim;
    nDif = nDif%3600000;
    var nMin = Math.floor(nDif/60000);
    var sMin = nMin<0 ? "00" : nMin<10 ? "0"+nMin : nMin;

...

    oDispl.firstChild.nodeValue = sTim + " : " + sMin + " : " + sSec + " : " + sMil;
Avatar billede roenving Novice
12. januar 2008 - 17:33 #14
-- og det skal jo nok være <1 og ikke <0 !-)
Avatar billede jammerlab Nybegynder
12. januar 2008 - 17:43 #15
Det er jo perfekt :o) kan jeg få jer til at smide et svar alle sammen?
Avatar billede jammerlab Nybegynder
12. januar 2008 - 17:43 #16
nTim<0 og nMin<0 skal være <1  ??
Avatar billede roenving Novice
12. januar 2008 - 18:05 #17
nTim osv. kan aldrig blive mindre end 0 (da det altid vil være heltal !-), så enten skal der spørges på mindre end eller lig med nul eller det nemmere mindre end 1 !o]

-- og velbekomme '-)
Avatar billede olebole Juniormester
12. januar 2008 - 18:15 #18
Ellers tak. Jeg påpegede blot en fejl i min kode fra det andet spørgsmål, så det må være w13 og roenvings points  ;o)
Avatar billede w13 Novice
12. januar 2008 - 19:03 #19
Okidoke. =)
Avatar billede jammerlab Nybegynder
12. januar 2008 - 19:08 #20
Hmm... har et andet JS script der kører med live time som viser klokken på serveren;

<script>
parent.document.getElementById('time').innerHTML = "<?php
$time = date("G:i:s");
Echo "<img src=../gfx/time.gif> Time: $time";
?>";
function loadet() {
setTimeout("location.reload(true)",1000);
}
</script>

men det ser ud til at dø når jeg også bruge nedtællingen... nogen idéer?
Avatar billede roenving Novice
14. januar 2008 - 00:11 #21
Den reloader vel også hele siden hvert sekund ?-)
Avatar billede jammerlab Nybegynder
03. marts 2008 - 10:22 #22
Må hellere få lukket :P Tak for hjælpen.
Avatar billede roenving Novice
03. marts 2008 - 15:42 #23
-- og tal for point ;~}
Avatar billede roenving Novice
03. marts 2008 - 16:29 #24
Tak !-)
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