0

I'm practicing some JS by writing a little program that prompts our user to enter a date to determine whether the date will be a leap year or not.

I'm using if statements and Number.isInteger(userInput) to determine whether their input is valid or not.

My problem is that I can get most dates to work but as the rule applies to leap years, years that can be divided by 100 must also be able to be divived by 400 in order for the year to be recognized as a leap year.

With my current code, every year that is divisible by 4 is a valid year and I'm quite stumped.

<p id="text"></p>

    <button onclick="leapYear()">Check for leap year</button>


    <script>

        function leapYear() {

            var year = prompt("Please enter a valid year");
            year = parseInt(year);

            if (year != "null") {

                if (Number.isInteger(year) === true) {

                    if (Number.isInteger(year/400) === true && Number.isInteger(year/100) === true) {

                        document.getElementById("text").innerHTML = year + " is a leap year!";


                        } else if (Number.isInteger(year/4) === true) {

                            document.getElementById("text").innerHTML = year + " is a leap year!";

                        } else {
                            document.getElementById("text").innerHTML = year + " is not a leap year";
                        }

                } else {

                    document.getElementById("text").innerHTML = "Please enter a valid year";

                }
            } 
        }







    </script>

</body>
spamwoo
  • 37
  • 5
  • 1
    Possible duplicate of [Check if year is leap year in javascript](http://stackoverflow.com/questions/16353211/check-if-year-is-leap-year-in-javascript) – Konstantinos Apr 04 '17 at 20:04
  • I know this may be a highly inefficient way to making this problem but I'd like to know why my if statements aren't working when 300 could pass as a leap year. I'm open to suggestions to different ideas too! – spamwoo Apr 04 '17 at 20:05
  • `else if (Number.isInteger(year/4) === true)`... what's stumping you about that? – Sam Axe Apr 04 '17 at 20:08
  • 1
    because you have wrong if's – Konstantinos Apr 04 '17 at 20:08
  • AHAAAA I figured it out...I do have the wrong ifs. I should have taken a little more time on this problem. – spamwoo Apr 04 '17 at 20:09
  • 1
    your algorithm is backward. https://en.wikipedia.org/wiki/Leap_year#Algorithm – ps2goat Apr 04 '17 at 20:09
  • @SamAxe The part that was stumping is when I start the if statement with "(Number.isInteger(year/4) === true)", everything that is divisible by 100 and NOT divisible by 400 still ends up being a leap year. That part of javascript confuses me – spamwoo Apr 04 '17 at 20:22
  • @ps2goat Thanks for the link. I get it now – spamwoo Apr 04 '17 at 20:26

1 Answers1

0

I had the wrong if's the entire time...thanks for reading though.

<body>

<p id="text"></p>

    <button onclick="leapYear()">Check for leap year</button>


    <script>

        function leapYear() {

            var year = prompt("Please enter a valid year");
            year = parseInt(year);

            if (year != "null") {

                if (Number.isInteger(year) === true) {

                    if (Number.isInteger(year/400) === true && Number.isInteger(year/100) === true) {

                        document.getElementById("text").innerHTML = year + " is a leap year!";


                        } else if (Number.isInteger(year/400) !== true && Number.isInteger(year/100) === true) {

                            document.getElementById("text").innerHTML = year + " is not a leap year";

                        } else if (Number.isInteger(year/4) === true) {

                            document.getElementById("text").innerHTML = year + " is a leap year!";

                        }

                        else {
                            document.getElementById("text").innerHTML = year + " is not a leap year";
                        }

                } else {

                    document.getElementById("text").innerHTML = "Please enter a valid year";

                }
            } 
        }







    </script>

</body>
spamwoo
  • 37
  • 5