Javascript 中使用嵌套 if-else 的闰年问题

Leap year Question in Javascript using nested if-else

在嵌套的if语句中,我已经给出了所有的条件。但是有些闰年没有显示为闰年。例如:2000 年是闰年,但 2016 年、2020 年不被视为闰年。请帮助。

var y = prompt("Enter the year");

if (y % 4 === 0) {
  if (y % 100 === 0) {
    if (y % 400 === 0) {
      alert(y + " is a leap year");
    } else {
      alert(y + " is not a leap year");
    }
  } else {
    alert(y + " is not a leap year");
  }
} else {
  alert(y + " is not a leap year");
}

逻辑错误。我不太清楚为什么你需要检查 y%100===0y%400===0

我以为y%4===0已经足够检查闰年了

但是我可以告诉你2016年肯定过不了y%100===0条件

因为 2016 除以 100 余数 16

日期处理的数学已经在 JavaScript 中。应该可以使用类似“let Dt = DateSerial(year, 2, 29); let isleapyear = Dt.getDate() == 29;

如果年份可以被100整除,你需要检查年份是否也可以被400整除。但是你缺少的是,如果年份不能被 100 整除但可以被 4 整除,那么它已经是闰年了。所以你需要像下面这样编辑你的代码:

if (y % 4 === 0) {
  if (y % 100 === 0) {
    if (y % 400 === 0) {
      alert(y + " is a leap year");
    } else {
      alert(y + " is not a leap year");
    }
  } else {
    //if year is divisible by 4 but not 100, it is a leap year
    alert(y + " is a leap year");
  }
} else {
  alert(y + " is not a leap year");
}
// program to check leap year
function checkLeapYear(year) {

  //three conditions to find out the leap year
  if ((0 == year % 4) && (0 != year % 100) || (0 == year % 400)) {
      console.log(year + ' is a leap year');
  } else {
      console.log(year + ' is not a leap year');
  }
}

// take input
const year = prompt('Enter a year:');

checkLeapYear(year);

没有办法绕过“思考”和测试。以下应该有效:

for (let y=1995;y<2111;y++)
  console.log(y,
 !(y%4) && !(!(y%100) && (y%400))
) 

使用 if-else 语句的非常简单的解决方案

function isLeap(year) {
   if (year % 4 === 0 || year % 400 === 0){
       console.log("Leap Year");
   }
   else if (year % 100 === 0){
       console.log("Not Leap Year");
   }
   else {
       console.log("Not Leap Year");
   }
}
//and then call the function 
isLeap(2024);