Как определить, является ли год високосным в 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