webForumDet fria alternativet

Få ett skript att även räkna med sekunder

JavaScript

2 svar · 332 visningar · startad av solbulle

Medlem sedan mars 20015 287 inlägg
Frågan#1

Jag har ett skript som räknar ut en tid det tar mellan två punkter.
Jag skulle vilja komplettera det så att man kan ange sekunder, men får inte till det.
Här i funktionen getRelativeDate används 0 som invärde på sekunder, men jag vill använda mig av ett värde inplitat i en div som alla andra värden.

Invärdena hämtas i denna rad:

		rt = getRelativeDate({day:$F('time-d'),hour:$F('time-h'),minute:$F('time-m')},deltaTime);

Där vill jag mao att även sekunderna plockas med:

typ: second:$F('time-s')}

Men jag får inte till det.
Jag har full respekt för att det säkerligen är svårt att komma med lösningar när man kanske inte ser hela bilden framför sig, jag postar så mycket kod jag kan som jag tror är relevant.
(Vidare tycker jag att hela funktioen räknar fel på en dag, men det gick ju lätt att fixa med fulknep.)

Jag har följande funktioner:

function beautifyTime(t){
	t = Math.round(t);
	r = {day:0,hour:0,minute:0,second:0};
	r.second = t % 60;
	t = (t - r.second) / 60;
	t.second = (t.second<10)?"0"+t.second:t.second;
	r.minute = t % 60;
	t = (t - r.minute) / 60;
	t.minute = (t.minute<10)?"0"+t.minute:t.minute;
	r.hour = t % 24;
	t = (t - r.hour) / 24;
	r.day = t;
	return r;
}

function getRelativeDate(rel,t){
//	console.log(rel.day + " " + rel.hour + " " + rel.minute);
	d = new Date();
	d.setDate(d.getDate() + rel.day);
	d.setMinutes(rel.minute);
	d.setHours(rel.hour);
	d.setSeconds(0);
	secs = Math.round(d.getTime());
	secs = secs - t*1000;
	d.setTime(secs);
	// We surely want to round by excess!
	rd = rel.day-Math.round(t/86400000 + 0.5);
//	console.log("Hour:" + d.getHours() + " Minute:" + d.getMinutes() + " Seconds:" + d.getSeconds());
	return {day:rd,dayname:daynames[rd],hour:d.getHours(),minute:d.getMinutes(),second:d.getSeconds()};
}

  		function update(n){
  			attacker = getAttacker(n);
  			target = getDefender();
  			if(!attacker.x || !attacker.y || !target.x || !target.y){
	  			Element.hide('result-'+n);
  				return;
  			}

  			speed = $F('slowTroup-'+n);
  			distance = getDistance(attacker,target);
  			deltaTime = getTravelTime(distance,speed);
  			//console.log("Speed: " + speed + " Distance:" + distance + " Delta Time:" + deltaTime);
  			tt = beautifyTime(deltaTime);
  			$('result-'+n+'-d').innerHTML = tt.day;$('result-'+n+'-h').innerHTML = tt.hour;
  			$('result-'+n+'-m').innerHTML = tt.minute;$('result-'+n+'-s').innerHTML = tt.second;
  			
  			rt = getRelativeDate({day:$F('time-d'),hour:$F('time-h'),minute:$F('time-m')},deltaTime);
  			$('result3-'+n+'-d').innerHTML = rt.dayname;
			$('result3-'+n+'-h').innerHTML = rt.hour;
			$('result3-'+n+'-m').innerHTML = rt.minute;
			$('result3-'+n+'-s').innerHTML = rt.second;
  			new Effect.Appear('result-'+n, { duration: 3.0 });
  		}
Medlem sedan mars 20015 287 inlägg
#2

Jag har kommit en bra bit på väg. I princip verkar det fungera... men.. inte om jag använder mig av funktionen beautifyTime på raden (som egentligen ska vara där i orginalscriptet:

$('result3-'+n+'-m').innerHTML = beautifyTime(rt.minute);

Då får jag tillbaks:

[object Object]

I vanlig ordning har jag inte en susning om varför det blir så...

Jag har inte rört den funktionen utan de ändringar jag har gjort är dessa rader:

I funktionen "Update()"

  	rt = getRelativeDate({day:$F('time-d'),hour:$F('time-h'),minute:$F('time-m'),second:$F('time-s')},deltaTime);

Ideer? Eller kanske tips om en annan funktion man kan lägga in för att just snygga till utskriften (Så att det blir 23:07:04 och inte 23:7:4 )

Medlem sedan mars 20015 287 inlägg
#3
function fixtime(timetofix){

var curr_min = timetofix

curr_min = curr_min + "";

if (curr_min.length == 1)
   {
   curr_min = "0" + curr_min;
   }
return curr_min;
}

Tjo!

284 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
140 ms — ändringar (db)