Как определить, является ли год високосным в JavaScript

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

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

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

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

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

Мой код имел проблему в этой строке

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

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

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

2 ответа

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

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

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

Следующий блок кода будет хорошо работать с Javascript, а также с Typescript, если вы удалите ключевое слово function. Чтобы понять логику этой реализации, взгляните на эту ссылку Как определить, является ли год високосным.

 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 используйте следующий код

Что касается ответа @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");
}
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
Другие вопросы по тегам