Search code examples
javascriptdategetdate

Can't make getDate() working while comparing dates


I'm making a solution where the user have to select two dates, and then I have to check that they are within a week of each other and find out how many days there are between them. I tried using "getDate()" to do this, but i just get the error:

TypeError: periodeSlutt.getDate is not a function

I was hoping that one of you could tell me what I am doing wrong. I have tried to search around, but I really can't figure out what the problem seems to be.

Also: I am Norwegian so the comments and variable-names are written in Norwegian. I apologize for the inconvenience.

<!doctype html>

<html>
    <head>
        <meta charset="utf-8">
        <title></title>

        <style type="text/css">

        </style>
    </head>

    <body>
        <form>
            Hei! Takk for at du ønsker å bestille heiskort hos oss. <br>
            Vennligst oppgi din alder: <input type="number" id="alder" min="1" max="99"> <br>
            Når ønsker du å besøke oss? Fra: <input type="date" id="datoStart"> Til: <input type="date" id="datoSlutt"> (Maks 1 uke)<br>
            <input type="submit" name="fullfør" onclick="beregnPris()">
        </form>
        <script type="text/javascript">

            var pris = 0;
            var makspris = 0;

            function beregnPris() {
                // sjekk om brukeren er under eller over 12 år.
                var brukerAlder = document.getElementById("alder").value;
                console.log(brukerAlder);

                    if (brukerAlder >= 12) {
                    // hvis under --> sett pris til 280 og makspris til 900.
                        pris = 280;
                        makspris = 900;
                    } else {
                    // hvis over --> sett pris til 440 og makspris til 1500.
                        pris = 440;
                        makspris = 1500;
                    }


                // sjekk når brukeren har bestilt.
                var periodeStart = document.getElementById("datoStart").value;
                var periodeSlutt = document.getElementById("datoSlutt").value;

                console.log(periodeStart);
                console.log(periodeSlutt);

                    // hvis tidsperioden er mer enn 7 dager, eller går tilbake i tid --> feilmelding.


                if (periodeStart > periodeSlutt) {
                    alert("Startdatoen må komme før sluttdatoen!");
                }

                // trekker en uke fra "periodeSlutt", slik at den kan sammenlignes med "periodeStart" og sjekke at oppholdet ike er mer enn én uke.
                var ukeSjekk = 0;
                ukeSjekk.setDate(periodeSlutt.getDate() - 7);
                console.log(ukeSjekk);

                if (periodeStart < ukeSjekk) {
                    alert("Du kan desverre ikke booke oss for mer en en uke.")
                }


                    // hvis tiden er rett --> pris * anntal dager.

                        // sjekker hvor mange dager det er mellom "periodeStart" og "periodeSlutt".
                        var antallDager = periodeSlutt.getDate() - periodeStart.getDate();

                        brukerPris = pris * antallDager;

                        // hvis prisen er under makspris --> ferdig.
                        if (brukerPris < makspris) {
                            document.write("Prisen ble " + brukerPris + ". Håper du har det flott hos oss.");
                        } else {
                            // hvis prisen er over makspris --> pris = pris - makspris. Rabatt = pris. Pris = makspris. --> ferdig
                            brukerPris = brukerPris - makspris;
                            var rabatt = brukerPris;
                            brukerPris = makspris;
                            document.write("Prisen ble " + brukerPris + ". Håper du har det flott hos oss. Du fikk en rabatt på " + rabatt + "kr!");
                        }   
            }

        </script>
    </body>
</html>

Solution

  • You're getting the raw numeric values from the inputs but you need to convert them to javascript Date() objects. Try this:

    var periodeStart = new Date(document.getElementById("datoStart").value);
    var periodeSlutt = new Date(document.getElementById("datoSlutt").value);
    

    and

    var ukeSjekk = new Date();