webForumDet fria alternativet

Räkna tid från datum

8 svar · 351 visningar · startad av Jesper2

Jesper2Medlem sedan dec. 200475 inlägg
#1

Jag har ställt frågan för ganska längesen men fick inget svar, jag kanske inte lämnade tillräckligt med information.. Men iallafall, jag har den här koden:

<script type="text/javascript">

var ds = "2004-10-27 21:40:26";

function f() {
    var d  = new Date(ds.replace(/-/g,"\/")),
	c  = new Date(),
	hf = (c - d) / 3600000;
	ha = Math.floor(hf),
	mf = 60 * (hf - ha),
	ma = Math.floor(mf);

    document.getElementById("time").innerHTML = 
	ha + " tim " + ma + " min " + Math.floor(60 * (mf - ma)) + " sek";
}

window.setInterval("f()", 960);

</script>

<span id="time"></span>

På min sida för att räkna hur lång tid det har gått sen en viss tidpunkt. Själva tidpunkten är dynamisk, jag har koden i ett PHP-dokument. Det fungerar, fast sekunderna "tickar" inte uppåt, och det står "Fel på sidan" i statusraden.

Vart är felet?

Tack på förhand
MVH,
Jesper Ahlin

RGBMedlem sedan dec. 1999419 inlägg
#2

Du försöker skapa ett Date objekt med fel argument, prova med
Date(YYYY, MM, DD, HH, mm, ss ,ms)
de fyra sista argumenten är frivilliga.

dectgapMedlem sedan sep. 20021 655 inlägg
#3

Genom att lägga #time före script-elementet förhindrar man att skriptet försöker leta upp ett element som inte finns än:

<span id="time"></span>

<script type="text/javascript">
...
</script>

Vad det gäller skapandet av Date-objektet så måste man inte skriva som RGB föreslår. Date-konstruktorn kan ta flera typer av argument:
http://www.byteshift.de/javascript-1415/CoreReferenceJS15/date.html#1193137

Allra enklast vore det nog att låta PHP skriva ut tiden som ett UNIX timestamp, lägga till tre nollor eftersom JavaScript vill ha tiden i millisekunder istället för sekunder och sköta det hela utanför funktionen.

T ex:

<script type="text/javascript">

var ds = "<?php echo time(); ?>000";
var d  = new Date(ds);

function f() {
    var c  = new Date(),
	hf = (c - d) / 3600000;
	ha = Math.floor(hf),
	mf = 60 * (hf - ha),
	ma = Math.floor(mf);

    document.getElementById("time").innerHTML = 
	ha + " tim " + ma + " min " + Math.floor(60 * (mf - ma)) + " sek";
}

window.setInterval("f()", 960);

</script>
Jesper2Medlem sedan dec. 200475 inlägg
#4

Jag kan inget JavaScript själv tyvärr :/

Och det fungerade inte som du skrev dectgap.. Så här ser det ut nu:

										echo "
										<script type=\"text/javascript\">
										var ds = \"".$tid1."".$tid2."\";
										
										function getTime() {
											var d  = new Date(ds.replace(/-/g,\"\/\")),
											c  = new Date(),
											hf = (c - d) / 3600000;
											ha = Math.floor(hf),
											mf = 60 * (hf - ha),
											ma = Math.floor(mf);
										
											document.getElementById(\"time\").innerHTML = 
											ha + \" tim \" + ma + \" min \" + Math.floor(60 * (mf - ma)) + \" sek\";
										}
										
										window.setInterval(\"f()\", 960);
										
										</script>
										
										<span id=\"time\"></span>
										";

$tid1 innehåller YYYY-MM-DD
$tid2 innehåller HH:MM:SS

Allt fungerar ju utom att sekunderna inte tickar, och att det står "Sidan innehåller ett fel" i statusraden :/

Jesper2Medlem sedan dec. 200475 inlägg
#5

Oj! Nu bytte jag ut namnet mot "f" så tickar sekunderna iallafall. Haha.. Men det är fortfarande "Fel på sidan"

dectgapMedlem sedan sep. 20021 655 inlägg
#6

Jag skrev att du skulle lägga span-elementet före script-elementet.

Jesper2Medlem sedan dec. 200475 inlägg
#7

dectgap skrev:

Jag skrev att du skulle lägga span-elementet före script-elementet.

Har provat det, men det gjorde ingen skillnad :/

dectgapMedlem sedan sep. 20021 655 inlägg
#8

Visa hela koden (OBS: inte PHP-kod) då.
Eller länka gärna till sidan.

Jesper2Medlem sedan dec. 200475 inlägg
#9

dectgap skrev:

Visa hela koden (OBS: inte PHP-kod) då.
Eller länka gärna till sidan.

Jag har redan visat all väsentlig kod, resten är bara massa PHP-tjafs. Jag kan tyvärr inte visa sidan eftersom det kräver en inloggning.

132 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)