Formatera Date() i javascript.

Trädvy Permalänk
Medlem
Plats
Vedevåg
Registrerad
Maj 2004

Formatera Date() i javascript.

Hej,

Jag sitter vanligtvis och leker med php, men nu har jag snubblat över ett problem som behöver involvering av javascript, ett helt nytt språk för mig.

Det som jag skulle behöva lite hjälp med är en "tidsräknare", problemet jag har just nu är att jag skulle behöva skriva ut en tid i datetime format, dvs yyyy-mm-dd hh:ii:ss och hela tiden uppdatera den.

Starttiden hämtas ifrån en mysql databas och php fyller i ett formulär med tiden. Typ:

Citat:

Tid:<input type="text" name="time" value="<?=$time ?>">

Nu är det så att tiden i formuläret ska ticka med så länge personen kollar på sidan. Vilket innebär att jag behöver öka och uppdatera value varje sekund.

Date() funktionen skriver ut i formatet (Thu Jul 30 2009 20:44:38 GMT+0200) och vad jag lyckas googla mig fram är att det inte finns några sätt att formatera hur Date returnerar, eller har jag fel?

Det känns som ett ganska stor arbete att med sträghantering göra om Date formatet till datetime formatet. Finns det några enkla sätt att göra detta på?

Känns som att det borde finnas ett ganska enkelt sätt att göra det hela på, men det ända jag kan komma på är att behandla alltihopa som strängar och en massa if satser för att kontrollera nollor etc...

Avatarkreds till: http://imgur.com/HOxIL
Alakai säger: Ryssen skrattar. Norrland hembränner på uppdrag av regeringen. Sälar dör i blyförgiftning, fulla och glada. Förvirringen är total. Kungen är nöjd.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

Re: Formatera Date() i javascript.

Citat:

Ursprungligen inskrivet av Mikael_Berglund
Hej,

Date() funktionen skriver ut i formatet (Thu Jul 30 2009 20:44:38 GMT+0200) och vad jag lyckas googla mig fram är att det inte finns några sätt att formatera hur Date returnerar, eller har jag fel?

Visst har du fel! En googling på php date gav följande: www.php.net/date

Testa date('Y-m-d h:i:s')

edit: Fast du menade naturligtvis i Javascript, och där har du ju helt rätt (jag läste inte ordentligt helt enkelt..)
Det finns ett par hemkokta lösningar att använda sig av. Vill du vara lat så kan du splitta strängen och pussla om bitarna.

edit2: alternativt, använd en <input id="korv" type="hidden"> för att skicka med starttiden från PHP. Läs in den med javascript och parsa om den till millisekunder med Date.parse(document.getElementById("korv").value)
Skapa en timer som klickar var 1000e millisekund, lägg till 1000 i din korvvariabel vid dessa tillfällen. Kör sedan något i stil med

var tmp = new Date(korvtid); var år = tmp.getFullYear(); var mån = tmp.getMonth() + 1; var dag = tmp.getDate(); var h = tmp.getHours(); var m = tmp.getMinutes(); var s = tmp.getSeconds(); var output = år + "-" + mån + "-" + dag + " " + h + ":" + m + ":" + s;

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Vedevåg
Registrerad
Maj 2004

Re: Re: Formatera Date() i javascript.

Citat:

Ursprungligen inskrivet av Teknocide
Visst har du fel! En googling på php date gav följande: www.php.net/date

Testa date('Y-m-d h:i:s')

edit: Fast du menade naturligtvis i Javascript, och där har du ju helt rätt (jag läste inte ordentligt helt enkelt..)
Det finns ett par hemkokta lösningar att använda sig av. Vill du vara lat så kan du splitta strängen och pussla om bitarna.

edit2: alternativt, använd en <input id="korv" type="hidden"> för att skicka med starttiden från PHP. Läs in den med javascript och parsa om den till millisekunder med Date.parse(document.getElementById("korv").value)
Skapa en timer som klickar var 1000e millisekund, lägg till 1000 i din korvvariabel vid dessa tillfällen. Kör sedan något i stil med

var tmp = new Date(korvtid); var år = tmp.getFullYear(); var mån = tmp.getMonth() + 1; var dag = tmp.getDate(); var h = tmp.getHours(); var m = tmp.getMinutes(); var s = tmp.getSeconds(); var output = år + "-" + mån + "-" + dag + " " + h + ":" + m + ":" + s;

Perfekt nu har jag fått det att fungera som det ska, har dock en fundering, när jag gjorde min timer så använde jag

counter = 0 function clock(){ ... din kod ... counter++ timer = setTimeout("clock()",1000) }

Detta tycker jag borde innebära att funktionen är rekursiv? Så jag misstänkte att den skulle slänga upp ett buffer overflow efter ett tag, men efter 50,000 iterationer så varnade inte firefox för någonting?

Avatarkreds till: http://imgur.com/HOxIL
Alakai säger: Ryssen skrattar. Norrland hembränner på uppdrag av regeringen. Sälar dör i blyförgiftning, fulla och glada. Förvirringen är total. Kungen är nöjd.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jan 2007
Citat:

Ursprungligen inskrivet av Mikael_Berglund
Detta tycker jag borde innebära att funktionen är rekursiv? Så jag misstänkte att den skulle slänga upp ett buffer overflow efter ett tag, men efter 50,000 iterationer så varnade inte firefox för någonting?

Nope, den är inte rekursiv. Funktionen avslutas direkt efter det att den har satt timern. setTimeout väntar inte på någonting.

Trädvy Permalänk
Medlem
Plats
Vedevåg
Registrerad
Maj 2004
Citat:

Ursprungligen inskrivet av You
Nope, den är inte rekursiv. Funktionen avslutas direkt efter det att den har satt timern. setTimeout väntar inte på någonting.

Aha, setTimeout sköts alltså ungefär som en ny tråd eller vad man ska kalla det. Tackar för infon, då vet jag att jag säkert kan använda den utan risker för problem med bufferten!

Avatarkreds till: http://imgur.com/HOxIL
Alakai säger: Ryssen skrattar. Norrland hembränner på uppdrag av regeringen. Sälar dör i blyförgiftning, fulla och glada. Förvirringen är total. Kungen är nöjd.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

En sista sak som kan vara värt att tänka på är att setTimeout 1000 inte nödvändigtvis innebär att nästa update kommer efter exakt 1000 millisekunder. Det kan därför vara av intresse att jämföra förra timestampen med den nya, för att utröna exakt hur mycket tid som har förflutit.

edit: Kom precis på en sak till: setInterval() kan vara bättre att använda i ditt fall så att systemet slipper sätta upp en ny timeout varje sekund.

Bilanaloger är som Volvo — varenda svenne kör med dem