Avatar billede webster Nybegynder
17. december 2002 - 15:22 Der er 4 kommentarer og
1 løsning

Tidszone konvertering

Hejsa eksperter

Jeg har forsøgt at lave et javascript der kan bruges til at konvertere en dato (med tidspunkt) til en anden tidszone. Desværre er mine evner inden for javascript ret begrænsede så det er ikke gået så godt. Det jeg har forsøgt er at:
- Tage en dato givet ved brugerinput (pt på formen yyyy-mm-dd hh:mm) og få lavet et date objekt ud af det
- Lig/træk n antal timer fra date objektet
- Udskrive tidspunkt/dato i den anden tidszone.

Jeg har haft nogle problemer med at få date objektet til at opføre sig ordentligt, så vil høre om der er nogen her der ligger inde med sådan et script eller kan hjælpe til med at få lavet et?

På forhånd tak
Avatar billede Slettet bruger
17. december 2002 - 16:06 #1
Det er denne teknik, som du skal bruge:

<script>
tz = 3; //+3 timer i forhold til brugerens tidszone. Hvis negativ, så bare:
//tz = -2;

dato = new Date(); //Dit dato-objekt (fyld det ud med inputtet fra formen)
dato.setTime(dato.getTime() + tz * 1000 * 60 * 60); //Læg/træk fra antal timer
</script>
Avatar billede webster Nybegynder
17. december 2002 - 16:19 #2
kan jeg få dig til at lave et stykke kode der tager mit brugerinput fra en variabel, laver dato objektet, og så tjekker om det var et gyldigt input, altså om der blev lavet et gyldigt dato objekt? Med den kode jeg forsøger med nu påstår den hele tiden at mit dato indput var ugyldigt.
Avatar billede Slettet bruger
17. december 2002 - 16:41 #3
Noget i denne stil:

<script>
function tidsZone(frm) {
dt = frm.datofelt.value;
if (dt == "" || !dt.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}/)) {
alert("Datoen er indtastet forkert, you filthy scumbag!");
document.frm.datofelt.focus();
return;
}
dato = new Date(parseInt(dt.substring(0, 4)), parseInt(dt.substring(5, 7)), parseInt(dt.substring(8, 10)), parseInt(dt.substring(11, 13)), parseInt(dt.substring(14, 16)), 0);
tz = -1;
dato.setTime(dato.getTime() + tz * 1000 * 60 * 60);
alert("Datoen i England er: " + dato.getFullYear() + "-" + (dato.getMonth() + 1) + "-" + dato.getDate() + " " + dato.getHours() + ":" + dato.getMinutes());
}
</script>

<form onSubmit="tidsZone(this); return false;">
Dato: <input type="datofelt" value="yyyy-mm-dd hh:mm" size="16" maxsize="16">
</form>
Avatar billede Slettet bruger
17. december 2002 - 16:48 #4
Det var i hvert fald forkert. Dette virker derimod:

<html>
<head>
<script>
function tidsZone(frm) {
dt = frm.datofelt.value;
if (dt == "" || !dt.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}/)) {
alert("Datoen er indtastet forkert, you filthy scumbag!");
frm.datofelt.focus();
return;
}
dato = new Date(parseInt(dt.substring(0, 4), 10), parseInt(dt.substring(5, 7), 10) - 1, parseInt(dt.substring(8, 10), 10), parseInt(dt.substring(11, 13), 10), parseInt(dt.substring(14, 16), 10), 0);
tz = -1;
dato.setTime(dato.getTime() + tz * 1000 * 60 * 60);
alert("Datoen i England er: " + dato.getFullYear() + "-" + (dato.getMonth() + 1) + "-" + dato.getDate() + " " + dato.getHours() + ":" + dato.getMinutes());
}
</script>
</head>
<body>
<form action="java script://" onSubmit="tidsZone(this); return false;">
Dato: <input type="text" name="datofelt" value="yyyy-mm-dd hh:mm" size="16" maxsize="16" onFocus="if (this.value == this.defaultValue) this.value = '';" onBlur="if (this.value == '') this.value = this.defaultValue;"><br>
<input type="submit" value="OK">
</form>
</body>
</html>
Avatar billede Slettet bruger
17. december 2002 - 16:49 #5
Hov, fjern det dér aciton="java script://" i form-tagget!
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