Avatar billede Slettet bruger
17. maj 2009 - 11:00 Der er 5 kommentarer og
1 løsning

Dato i tekstfelt - klikke frem og tilbage

Hej, jeg har en formular, hvor brugeren kan indtaste noget data - bl.a. dato. Lige nu ser det sådan her ud:

<input type="text" name="dato" value="<?php echo $today; ?>">

($today = date("d-m-Y");)

Ok, jeg ville gerne kunne sætte et lille plus- og minus-ikon på hver side af tekst-feltet så brugeren kunne klikke en dag frem eller tilbage. Kan det (nemt) klares vha. JavaScript?
Avatar billede tjens Nybegynder
17. maj 2009 - 14:59 #1
<html>
<head>
<title> Date +- </title>
<script type="text/JavaScript">
function changeDate(days) {
    var oldDate = new Date();
    var dateString = document.getElementById("inpDate").value;
    oldDate.setFullYear(dateString.substr(0,4), dateString.substr(4,2)-1, dateString.substr(6,2) );
    var newDate = new Date();
    newDate.setTime(oldDate.getTime()+days*86400000);
    var newDateString = "" + newDate.getFullYear() ;
    if ( newDate.getMonth()<9)
        newDateString += "0";
    newDateString +=    (newDate.getMonth() +1) ;
    if ( newDate.getDate()<10)
        newDateString += "0";
    newDateString += newDate.getDate();
    document.getElementById("inpDate").value = newDateString;
}
</script>
</head>
<body>
    <input type="button" onclick="changeDate(-1);" value="-"/>
    <input type="text" id="inpDate" value="20090531" />
    <input type="button" onclick="changeDate(1);" value="+" />
</body>
</html>
Avatar billede Slettet bruger
17. maj 2009 - 17:50 #2
Hej - tak for input. Er det en lille ting, hvis dato-formatet skal være: 17-05-2009 ?
Avatar billede tjens Nybegynder
17. maj 2009 - 20:21 #3
Ja, der skal bare flyttes lidt rundt på substr og rækkefølge:

function changeDate(days) {
    var oldDate = new Date();
    var dateString = document.getElementById("inpDate").value;
    oldDate.setFullYear(dateString.substr(6,4), dateString.substr(3,2)-1, dateString.substr(0,2) );
    var newDate = new Date();
    newDate.setTime(oldDate.getTime()+days*86400000);
    var newDateString = "";
    if ( newDate.getDate()<10)
        newDateString += "0";
    newDateString += newDate.getDate() + "-";
    if ( newDate.getMonth()<9)
        newDateString += "0";
    newDateString += (newDate.getMonth() +1) ;
    newDateString += "-" + newDate.getFullYear() ;
    document.getElementById("inpDate").value = newDateString;
}
Avatar billede Slettet bruger
18. maj 2009 - 08:53 #4
Perfekt - præcist hvad jeg ledte efter! Mange tak for hjælpen!
Avatar billede tjens Nybegynder
18. maj 2009 - 17:31 #5
En mere driftsikker version med split() i stedet for substr() og med lidt grundlæggende dato-validering tilføjet:

function changeDate(days) {
    var oldDate = new Date();
    var dateSplit = document.getElementById("inpDate").value.split("-");
    if (dateSplit.length != 3 || dateSplit[0]>31 || dateSplit[1] > 12  || dateSplit[0]<1 || dateSplit[1] <1 || dateSplit[2] <2009 ) {
        alert("Datoformat skal være DD-MM-ÅÅÅÅ\n");
        return;
    }
    oldDate.setFullYear(dateSplit[2], dateSplit[1]-1, dateSplit[0] );
    var newDate = new Date();
    newDate.setTime(oldDate.getTime()+days*86400000);
    var newDateString = "";
    if ( newDate.getDate()<10)
        newDateString += "0";
    newDateString += newDate.getDate() + "-";
    if ( newDate.getMonth()<9)
        newDateString += "0";
    newDateString += (newDate.getMonth() +1) ;
    newDateString += "-" + newDate.getFullYear() ;
    document.getElementById("inpDate").value = newDateString;
}
Avatar billede Slettet bruger
18. maj 2009 - 22:41 #6
Så tager jeg den i stedet :-)

Tak endnu en gang!
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