Avatar billede seamus Nybegynder
11. januar 2007 - 15:38 Der er 8 kommentarer og
1 løsning

Valider dato + 2

Jeg sidder med en bestillingsformular, hvor der skal bestilles senest 2 dage i forvejen.

Datoformat i inputfelt: 11-01-2007
Jeg validerer andetsteds på formatet, så det ser altid sådan ud.

Jeg kunne nu godt tænke mig et lille javascript, der tjekker, om datoen er gyldig - dvs. hvis i dag er 11-01-2007, vil den næste gyldige dato være 13-01-2007.

I pseudokode er det vel noget i retning af:

If [datofelt.value] < [datofelt.value + 2] -> Error

Brugeren skal alertes, så indtastningen kan rettes.

For dem der kan, er det sikkert let, men jeg giver alligevel 80 point, da det er vigtigt for mig :-)

På forhånd mange tak for hjælpen...
Avatar billede seamus Nybegynder
11. januar 2007 - 15:40 #1
Hov...

Pseudokode bør være
If [datofelt.value] < [datoNow.value + 2] -> Error
Avatar billede crazysnap Seniormester
11. januar 2007 - 23:44 #2
Hej seamus,

Det er faktisk forholdsvist nemt at lege med datoer i javascript. Man kan benytte sig at Date() objektet som ud paramter henter datoen fra idag, og med parameter definerer en dato ud fra en streng. Jeg har nedenfor lavet et lille eksempel som burde løse den problemstilling du beskriver. Håber du kan bruge det! :)



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.1 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>lukke parent demo</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <script language="JavaScript">
       
        function Compare()
        {
            //Henter værdien fra input-feltet og gemmer det som en streng
            var strDate = document.getElementById("DatoFelt").value;
           
            //Hiver både dag, måned og år ud af strengen.
            var strDay = strDate.substring(0, 2);
            var strMonth = strDate.substring(3, 5);
            var strYear = strDate.substring(6);
           
            //Laver et nyt dato object med måned først i stedet for dag først
            //(den engelske måde at skrive datoen på)
            var checkDate = new Date(strMonth + "-" + strDay + "-" + strYear);
           
            //Henter nuværende dato
            var maxDate = new Date();
           
            //Læger to dage til dags dato
            maxDate.setDate(maxDate.getDate()+2);
           
            if (checkDate < maxDate)
            {
                alert ("Der skal bestilles mindst to dage i forvejen, dvs tidligst den: " + maxDate.toLocaleDateString());
            }
        }

        </script>
    </head>
    <body onload="runSlideShow()">
        <input type="text" id="DatoFelt" name="startDate" size="12">
        <input type=button value="validér datoen" onClick="Compare()">

    </body>
</html>



Hvis der er noget der mangler må du endelig skrive! :)


- Snap
Avatar billede crazysnap Seniormester
11. januar 2007 - 23:45 #3
som ud paramter = som uden parameter
Avatar billede crazysnap Seniormester
11. januar 2007 - 23:52 #4
Hov og fjern lige onload="runSlideShow()" fra body tag'gen i html koden (noget fra et gammelt eksempel her på Eksperten, sorry)  :)
Avatar billede seamus Nybegynder
12. januar 2007 - 10:54 #5
crazysnap >>

Jeg har modificeret dit script, som du kan se herunder, og det virker storartet...
Med dit script skal man vælge en dato 3 dage ude i fremtiden før at det virker. Jeg har derfor ladet dine variabler stå til udregningen og tilføjet nye, der skal angive outputtet...

            //Henter værdien fra input-feltet og gemmer det som en streng
            var strDate = document.getElementById("Dato").value;
           
            //Hiver både dag, måned og år ud af strengen.
            var strDay = strDate.substring(0, 2);
            var strMonth = strDate.substring(3, 5);
            var strYear = strDate.substring(6);
           
            //Laver et nyt dato object med måned først i stedet for dag først
            //(den engelske måde at skrive datoen på)
            var checkDate = new Date(strMonth + "-" + strDay + "-" + strYear);
           
            //Henter nuværende dato til valideringsfunktion
            var maxDate = new Date();
           
            //Læger to dage til dags dato i valideringsfunktion
            maxDate.setDate(maxDate.getDate()+1);

            //Henter nuværende dato til alert output
            var maxDateOutput = new Date();

            //Læger to dage til dags dato i valideringsfunktion
            maxDateOutput.setDate(maxDateOutput.getDate()+2);
           
            if (checkDate < maxDate)
            {
                alert("Der skal bestilles mindst to dage i forvejen, dvs tidligst den: " + maxDateOutput.toLocaleDateString());
        myForm.Dato.focus()
        return false
            }
Avatar billede seamus Nybegynder
12. januar 2007 - 10:56 #6
- Hov burde være således (fejl i kommentar)

            //Henter værdien fra input-feltet og gemmer det som en streng
            var strDate = document.getElementById("Dato").value;
           
            //Hiver både dag, måned og år ud af strengen.
            var strDay = strDate.substring(0, 2);
            var strMonth = strDate.substring(3, 5);
            var strYear = strDate.substring(6);
           
            //Laver et nyt dato object med måned først i stedet for dag først
            //(den engelske måde at skrive datoen på)
            var checkDate = new Date(strMonth + "-" + strDay + "-" + strYear);
           
            //Henter nuværende dato til valideringsfunktion
            var maxDate = new Date();
           
            //Læger to dage til dags dato i valideringsfunktion
            maxDate.setDate(maxDate.getDate()+1);

            //Henter nuværende dato til alert output
            var maxDateOutput = new Date();

            //Læger to dage til dags dato i alert output
            maxDateOutput.setDate(maxDateOutput.getDate()+2);
Avatar billede seamus Nybegynder
12. januar 2007 - 10:56 #7
Du får point, da jeg fik hjælp nok til at "hjælpe mig selv" :-)
Avatar billede crazysnap Seniormester
12. januar 2007 - 11:00 #8
Jamen det ser jo smukt ud (det skulle jo også helst være en skabelon så du selv kunne færdige gøre den, det er ofte meget svært at tyde hvad i helt præcis skal bruge scriptet til) :).
Jeg kan dog lige tilføje at hvis du udskifter:


var checkDate = new Date(strMonth + "-" + strDay + "-" + strYear);


med:


var checkDate = new Date(strMonth + "/" + strDay + "/" + strYear);


virker scriptet også i firefox (var lige hurtig nok i går aftes). ;)


Men jeg er glad for jeg kunne hjælpe dig og held og lykke med det fremover!


Mange tak for pointene!


Mvh.

- Snap
Avatar billede seamus Nybegynder
12. januar 2007 - 12:27 #9
Tak for tippet...

Det skal køre i et Windowsbaseret miljø, men man ved jo aldrig, hvad brugerne kan finde på ;-)
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