S solbulle Medlem sedan mars 2001 5 287 inlägg Frågan 1 jan. 2009 23:50 #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 });
}
S solbulle Medlem sedan mars 2001 5 287 inlägg 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 )
S solbulle Medlem sedan mars 2001 5 287 inlägg 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!