JavaScript查找闰年

30

当月份为二月时,我该如何让下面的代码正常运行?目前它会到达日期,但在到达判断是否为闰年的if语句之前停止。

 if (month == 2) {
    if (day == 29) {
        if (year % 4 != 0 || year % 100 == 0 && year % 400 != 0) {
            field.focus();
             field.value = month +'/' +  '';
        }
    }
    else if (day > 28) {
        field.focus();
             field.value = month +'/' +  '';
    }
}

停止是怎么回事?有错误吗? - Pekka
它从不计算年份以查看是否为闰年,而是直接跳转到field.focus和field.value,无论是否为闰年。 - Juan Almonte
你的条件看起来有点奇怪 - 因为它们目前的写法只检查day是否大于或等于29(基于 day == 29day > 28 的if语句)。我猜想你的意思是要写成 day <= 28,如果是这样的话,你可以去掉第二个 else if 条件,直接用一个 else 条件就可以了。在闰年的条件中增加一组括号可能更安全: if (year % 4 != 0 || (year % 100 == 0 && year % 400 != 0)) - JW8
1
你可能需要展示一些周围的代码来说明这些变量是如何被设置的。如果你使用了日期对象,请记住它使用基于零的月份。 - nnnnnn
16个回答

1

所有内容在一行中

const isLeapYear = (year) => (year % 100 === 0 ? year % 400 === 0 : year % 4 === 0);

console.log(isLeapYear(2016)); // true
console.log(isLeapYear(2000)); // true
console.log(isLeapYear(1700)); // false
console.log(isLeapYear(1800)); // false
console.log(isLeapYear(2020)); // true

0

另一种选择是查看那一年是否有2月29日这个日期。如果有这个日期,那么你就知道它是一个闰年。

ES6

// Months are zero-based integers between 0 and 11, where Febuary = 1
const isLeapYear = year => new Date(year, 1, 29).getDate() === 29;

测试

> isLeapYear(2016);
< true
> isLeapYear(2019);
< false

0

另一种非条件解决方案:

const leapYear = y => (y % 4 === 0) + (y % 100 !== 0) + (y % 400 === 0) === 2

0
function leapYear(year){
    if((year%4==0) && (year%100 !==0) || (year%400==0)){
        return true;
    }
    else{
        return false;
    }
}
var result = leapYear(1700);
console.log(result);

虽然这段代码可以回答问题,但提供有关它如何以及为什么解决问题的更多背景信息会提高答案的长期价值。 - Carol-Theodor Pelu

0

Pseudo code

if year is not divisible by 4 then not leap year
else if year is not divisible by 100 then leap year
else if year is divisible by 400 then leap year
else not leap year

JavaScript(JavaScript)
function isLeapYear (year) {
    return year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 )
}

使用上述代码可以确保如果year不可被4整除,则仅进行一次检查。 仅通过添加括号,您就可以节省每年2次检查,这些年份不能被4整除。


0

这将返回布尔值:

function checkLeapYear(year) {
    return(new Date(year, 1, 29).getDate() === 29);
}

这将返回天数:

function countYearDays(year) {
    if (new Date(year, 1, 29).getDate() === 29)
        return 366;
    else
        return 365;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接