在javascript中检查年份是否为闰年

Big*_*Bob 65 javascript date date-arithmetic conditional-statements

 function leapYear(year){
    var result; 
    year = parseInt(document.getElementById("isYear").value);
    if (years/400){
      result = true
    }
    else if(years/100){
      result = false
    }
    else if(years/4){
      result= true
    }
    else{
      result= false
    }
    return result
 }
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止(该条目是在从这样存储在"isYear"),我基本上遵循了这一位置,所以使用的是什么我已经有了,我怎么可以检查,如果该条目是基于这些条件闰年(注意我在实现伪代码时可能做错了,如果有的话请纠正我)编辑:注意这需要使用整数而不是日期函数

小智 153

function leapYear(year)
{
  return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
Run Code Online (Sandbox Code Playgroud)

  • 有史以来最快!!! 可以减少到...加速一点功能isLeap(y){return!((y%4)||(!(y%100)&& y%400)); } (4认同)
  • 仅供参考:这似乎比`isLeap`(下图)更高效 - http://jsfiddle.net/atwright147/7dqzvzpr/ (2认同)
  • @fedeghe而且我以为我做了最简洁的一个`!(y%4)&&(!(y%400)|| !!(y%100));`直到我读到你的评论,但你做了反向逻辑并保存了两个字符!哈哈.做得太好了. (2认同)

Eug*_*nic 36

该功能检查二月是否有29天.如果确实如此,那么我们就有一个闰年.

function isLeap(year) {
  return new Date(year, 1, 29).getDate() === 29;
}
Run Code Online (Sandbox Code Playgroud)

ES6

let isLeap = year => new Date(year, 1, 29).getDate() === 29;
Run Code Online (Sandbox Code Playgroud)

  • 我实际上最喜欢这个解决方案,因为它不需要格里高利历的任何潜在知识. (9认同)
  • @inetphantom 你刚才描述的问题就像反向 y2k (5认同)

C-Y*_*C-Y 6

Kevin P. Rice 在这里提供了一个更快的解决方案:https : //stackoverflow.com/a/11595914/5535820 所以这是代码:

function leapYear(year)
{
    return (year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0);
}
Run Code Online (Sandbox Code Playgroud)

  • 可读性较差@ReinstateMonica3167040 (7认同)
  • 这样更简洁:`!(y&3||y&15&&!(y%25))` (6认同)
  • @elad.chen 同意,我必须评论这一点,因为对已接受答案的评论。回想起来,这有点愚蠢:除了试图使其难以阅读之外,没有任何真正的好处...... (2认同)