Avatar billede finn-l Nybegynder
10. februar 2004 - 16:06 Der er 18 kommentarer og
1 løsning

Konvetering af dato- og tidsformat

Jeg får leveret oplysninger fra en database hvor dato- og tidsformat desværre er i US-format; dvs. mm/dd/yyyyy men jeg skal bruge dem i dd/mm/yyyyy.

Jeg havde egentlig fundet et javascript der kunne konveterer datoformatet (forudsat at datoformatet altid er mm/dd/yyyyy), men det der gør det "tricky" er at datoen i US-format bliver leveret på flere forskellige måder alt efter dag og måned;

2/10/2004 (10. Februar 2004)
10/9/2004 (9. Oktober 2004)
12/24/2004 (24. december 2004)

Problemet med tidsformatet er at det bliver leveret som AM/PM - Men det er knap så vigtig at få ændret!

Er der nogen gode forslag til et javascript der kan ændre US-datoformat til et dansk datoformat, der tager højde for 1-2 cifre i dag/måned angivelsen?
Avatar billede nute Nybegynder
10. februar 2004 - 16:18 #1
<script language="JavaScript" type="text/javascript">
    <!--
    var strDate = "2/9/2004";
    alert( formatDate( strDate ) );
    // Function der tager formatet mm/dd/yyyyy og laver det om til dd/mm/yyyyy
    function formatDate( p_strDate )
    {
        var objNewDate = new Date( p_strDate );
        var strDate = ( ( objNewDate.getDate() < 10 ) ? "0" : "" ) + objNewDate.getDate();
        var strMonth = ( ( ( objNewDate.getMonth()+1) < 10 ) ? "0" : "" ) + objNewDate.getMonth();
        var strYear = objNewDate.getFullYear();;
        return strDate + "/" + strMonth + "/" + strYear;
    }
    //-->
    </script>
Avatar billede roenving Novice
10. februar 2004 - 16:19 #2
>>nute

-- hvad så hvis den bliver leveret som 2/9/04 ?-)
Avatar billede nute Nybegynder
10. februar 2004 - 16:24 #3
så går det hele ad helvete til :,(

/nute
Avatar billede nute Nybegynder
10. februar 2004 - 16:25 #4
man kan jo selvfølgelig lægge ind en lille check på om der kun er 2 ciffer i årstal, meeeen ... man kan jo ikke vide om det er 2004 eller 1904 det er snak om ...

/nute
Avatar billede roenving Novice
10. februar 2004 - 16:25 #5
Samt det evige javascript-problem: at month er 0-baseret:

<script type="text/javascript">
dato = '2/9/04';
dato = dato.split("/");
for(i=0;2>i;i++)dato[i] = ((dato[i]>9||dato[i].length==2)?"":"0") + dato[i];
dato[2] = ((dato[2].length==2)?"20":"") + dato[2];
dato = dato[1]+"/"+dato[0]+"/"+dato[2];
alert(dato);
</script>
Avatar billede nute Nybegynder
10. februar 2004 - 16:26 #6
desuden ... der står i "opgaveteksten" at formatet er mm/dd/yyyy, så jeg bekymrer mig ikke så meget ... *er arrogant*

;o]
Avatar billede finn-l Nybegynder
10. februar 2004 - 16:39 #7
Dag og måned veksler mellem at være henholdsvis 1 eller 2 cifre (som beskrevet i datoeksemplerne) - årstallet er altid 4 cifre!

Hvordan får jeg skrevet resultatet ud i klar tekst (absolut intet kendskab til javascript :-/ )
Avatar billede nute Nybegynder
10. februar 2004 - 16:54 #8
noget ála dette:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
    <script language="JavaScript" type="text/javascript">
    <!--
    // Function der tager formatet mm/dd/yyyyy og laver det om til dd/mm/yyyyy
    function formatDate( p_strDate )
    {
        var objNewDate = new Date( p_strDate );
        var strDate = ( ( objNewDate.getDate() < 10 ) ? "0" : "" ) + objNewDate.getDate();
        var strMonth = ( ( ( objNewDate.getMonth()+1) < 10 ) ? "0" : "" ) + objNewDate.getMonth();
        var strYear = objNewDate.getFullYear();
        var strNewDate =  strDate + "/" + strMonth + "/" + strYear;
        document.getElementById( "spnDato" ).innerText = strNewDate;
        document.getElementById( "txtDato" ).value = strNewDate;
    }
    //-->
    </script>
</head>

<body>
<span id="spnDato"></span><br>
<input type="text" id="txtDato"><br>
Formater dato: <input type="text" value="2/9/2004" id="txtFormatDato"><br>
<input type="button" value="Formatér" onclick="formatDate( document.getElementById( 'txtFormatDato' ).value );">
</body>
</html>

/ntue
Avatar billede nute Nybegynder
10. februar 2004 - 16:56 #9
hmm... men hvis du får værdien fra en database ... hvorfor laver du så ikke konverteringen serverside istedet for clientside ??
Avatar billede finn-l Nybegynder
10. februar 2004 - 17:05 #10
Det er desværre en lukket database jeg kun kan trække oplysninger fra, og ikke ændre i (hvilket jeg havde foretrukket).
Avatar billede nute Nybegynder
10. februar 2004 - 17:08 #11
men hvordan trækker du data ud af basen ? du kan jo ændre dato *efter* du har trukket data ud af basen !
Avatar billede finn-l Nybegynder
10. februar 2004 - 17:28 #12
Jeg får data fra en FileMaker Pro database der efter at blevet parset på serveren leverer resultatet (CDML) som klar tekst på klientsiden - Dvs. at alt dato/tidsformatering skal foregå i selve databasen.

Jeg har adgang til at hente data fra selve databasen, men den er lukket for redigering - Min skumle plan var så at den færdige dato i klartekst, der bliver leveret på websiden, skulle konveteres til DK-datoformat via et javascript. Det javascript jeg havde fundet der virkede fint hvis bare dag og måned altid var i 2 cifre

----snip----

<script type="text/JavaScript">
<!--
var str = "12/09/2004";
var mdr = str.substring(0,2)
var dag = str.substring(3,5)
var aar = str.substring(6,10)

document.write(dag + "/" + mdr + "/" + aar);

//-->
</script>

----snip slut----

De datoer jeg får leveret er dag og måned desværre ikke altid med 2 cifre, og jeg kan derfor ikke bruge scriptet. Det er ellers genialt på den måde, at det placeres i body og ikke head, og jeg derfor kan placerer det ved alle datoforekomster på siden.

Jeg kan umiddelbart ikke få dit script til at virke - men send mig et svar og du får dine points - Jeg må nok tilbage til tegnebordet og finde en anden løsning ;-)
Avatar billede nute Nybegynder
10. februar 2004 - 17:35 #13
hmm ... jeg fatter stadig ikke hvorfor du ikke kan formattere på serveren. selv om basen er "lukket for redigering", så må det da være *dig* der har lavet scriptet der hiver data *ud* fra basen ??? eller ... ? Det er jo ikke snak om at du skal dykke ned i basen for at ændre ... du formatterer dato *efter* at du har fået dato ud fra basen og *før* du sender data til klienten.

CDML ??
Avatar billede roenving Novice
10. februar 2004 - 17:37 #14
Jamen, virker min så ikke ?-)
@10/02-2004 16:25:53
Avatar billede nute Nybegynder
10. februar 2004 - 17:45 #15
"Jeg kan umiddelbart ikke få dit script til at virke " - er dette en henvendelse til mig eller roenving ? og hvis det ikke "virker" - *hvad* er det der ikke virker ? hvis du kopierer hele scriptet ind i et HTML dokument og kigger på det i din browser, så skal det fungere ... på nær én ting jeg lige har oversæt, som roenving kommenterer i sit indlæg @ 10/02-2004 16:25:53.

Denne linje:

var strMonth = ( ( ( objNewDate.getMonth()+1) < 10 ) ? "0" : "" ) + objNewDate.getMonth();

må blive til:

var strMonth = objNewDate.getMonth()+1;
strMonth = ( ( strMonth < 10 ) ? "0" : "" ) + strMonth;

for at det skal blive korrekt. meeen...roenving sit eksempel er jo også rimelig straight-forward. det er lidt overkill at oprette et Date objekt for at strengbehandle

/nute
Avatar billede finn-l Nybegynder
10. februar 2004 - 18:06 #16
Du må du s** undskylde roenving - jeg havde helt overset din post :-/ Dit script virker meget fint. Lav et svar så jeg kan smide dig nogle points!! (Nu skal jeg også bare få scriptet til at virke i Apples Safari browser hmm!)
Avatar billede roenving Novice
10. februar 2004 - 18:19 #17
Virker det ikke i Safari ?-)

Metoderne er ellers oldgamle, jeg tror sågar det er js 1.1 fra '96 eller '97 der dækker de metoder !-)

-- og velbekomme '-)
Avatar billede roenving Novice
10. februar 2004 - 18:34 #18
-- og tak for points ;~}
Avatar billede finn-l Nybegynder
10. februar 2004 - 18:38 #19
Jeg ved heller ikke hvad der er galt - Jeg tror Apples Safari stadig mangler noget optimering af deres webcore!
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