如何确定一年是否是JavaScript中的闰年

时间:2018-05-10 03:27:43

标签: javascript datetime leap-year

我试图确定一年是否是闰年。我不确定我在哪里遗漏了一些东西,因为这段代码是为了确定这一点。

感谢您的帮助。

let Year = (year) => {
    this.year = year;
};

Year.prototype.isLeap = () => {
    return (
        this.year % 400 === 0 ||
        (this.year % 4 === 0 && (this.year % 100 === 0))
    );
};

let year = new Year(2014);

year.isLeap();

谢谢,我已经弄明白了。

最初我做的就是那些你们指向here的If语句,所以我现在正在重构一个更干净的代码。

我的代码在这一行有问题

(this.year % 4 === 0 && (this.year % 100 === 0))

正确的语法是

(this.year % 4 === 0 && !(this.year % 100 === 0))

4 个答案:

答案 0 :(得分:6)

您可以查看给定年份的2月29日,看看它是否会在3月1日发生变化。

const date = new Date(this.year, 1, 29);
return date.getMonth() === 1;

如果getMonth()返回1,那么它仍然是2月,这意味着它的闰年。

答案 1 :(得分:0)

Number.prototype.isLeap = function() {
  return !(this % 4 || !(this % 100) && this % 400);
}

let year = 2000;
console.log(year.isLeap()); // prints true

year = 1900;
console.log(year.isLeap()); // prints false

year = 1904;
console.log(year.isLeap()); // prints true

year = 2003;
console.log(year.isLeap()); // prints false

答案 2 :(得分:0)

如果您删除 function 关键字,以下代码块将在Javascript和Typescript上正常运行。要了解此实现背后的逻辑,请查看此链接How to determine whether a year is a leap year

 function isLeapYear(year) {
    let isLeapObj = {};
    if ((year % 4 === 0 && year % 100 != 0) || year % 400 === 0) {
      isLeapObj['isLeap'] = true;
      isLeapObj['days'] = 366;
    } else {
      isLeapObj['isLeap'] = false;
      isLeapObj['days'] = 365;
    }
    return isLeapObj;
  }

x = isLeapYear(2020);
console.log(x);

对于Javscript,请使用以下代码

答案 3 :(得分:0)

关于上述@brenjt的答案,您可能希望将值29更改为30

const date = new Date(this.year, 1, 30);
if (date.getMonth() === 1) {
  console.log("it's not a leap year");
} else {
  console.log("it's a leap year");
}