Как определить, является ли год високосным в JavaScript - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь определить, является ли год високосным или нет. Я не уверен, где я что-то упускаю, потому что этот код предназначен для определения этого.

Спасибо за вашу помощь.

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();

Спасибо, я понял это.

Изначально я сделал это, как если бы вы, ребята, указали на здесь !, так что теперь я делаю рефакторинг для более чистого кода.

У моего кода была проблема в этой строке

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

правильный синтаксис:

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

Ответы [ 2 ]

0 голосов
/ 10 мая 2018
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
0 голосов
/ 10 мая 2018

Вы можете просто проверить 29-го февраля этого года и посмотреть, изменится ли он на 1 марта.

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

Если getMonth() возвращает 1, то это все еще feburary, что означает его високосный год.

...