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

IT技术 javascript date conditional-statements date-arithmetic
2021-01-16 08:59:55
 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
 }

这是我到目前为止所拥有的(条目来自因此存储在“isYear”中),我在这里基本上遵循了这个,所以使用我已经拥有的,我如何根据这些条件检查条目是否是闰年(注意我在实现伪代码时可能做错了,如果我有请纠正我)编辑:注意这需要使用整数而不是日期函数

6个回答
function leapYear(year)
{
  return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
@fedeghe 怎么样!(y&3||y&15&&!(y%25));详情请参见stackoverflow.com/q/9852837/3167040
2021-03-18 08:59:55
史上最快!!!可以简化为......这加快了一个位函数 isLeap (y) { return !((y % 4) || (!(y % 100) && y % 400)); }
2021-03-21 08:59:55
@fedeghe 在!(y%4)&&(!(y%400)||!!(y%100));阅读您的评论之前,我认为我已经做了最简洁的一个,但是您做了逆逻辑并保存了两个字符!哈哈。做得很好。
2021-04-02 08:59:55
小吹毛求疵,但在大多数情况下,使用严格的(不)等式运算符“===”是正确的。
2021-04-07 08:59:55
仅供参考:这似乎比isLeap(下面)性能更高——jsfiddle.net/atwright147/7dqzvzpr
2021-04-13 08:59:55

该函数检查二月是否有 29 天。如果是这样,那么我们就有了闰年。

ES5

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

ES6

const isLeap = year => new Date(year, 1, 29).getDate() === 29;

结果

isLeap(1004) // true
isLeap(1001) // false
@inetphantom 你刚才描述的问题就像反向 y2k
2021-03-22 08:59:55
请注意,如果您想检查闰年,以便可以为过去或未来的某个任意点显示正确的日期(即,x 天前的日期是什么/现在 x 天后的日期是什么),您可以使用“new Date(todays_year, todays_month, todays_day + x));”,其中 todays_year、todays_month 和 todays_day 可以从单独的 Date 对象中检索。即,您根本不需要检查闰年。
2021-03-30 08:59:55
对于输入不起作用00000099
2021-03-31 08:59:55
我实际上最喜欢这个解决方案,因为它不需要任何公历的基础知识。
2021-04-11 08:59:55

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

function leapYear(year)
{
    return (year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0);
}
这是更简洁的: !(y&3||y&15&&!(y%25))
2021-03-26 08:59:55

如果您在 Node.js 应用程序中执行此操作,则可以使用闰年包:

npm install --save leap-year

然后在您的应用中,使用以下代码验证提供的年份或日期对象是否为闰年:

var leapYear = require('leap-year');

leapYear(2014);
//=> false 

leapYear(2016);
//=> true 

使用这样的库的优点是您不必处理使所有特殊情况正确的肮脏细节,因为库会处理这些。

另一方面,无论如何,所有这些都可能是矫枉过正。下一年根本year % 4不起作用的是 2100,今天构建的大多数软件无论如何都不会看到。如果您愿意,请添加 <irony> 标签...
2021-03-24 08:59:55
是吗?如果您查看此问题中的错误答案(人们只需将其除以 4 并检查余数),那么对于某些人来说,使用图书馆可能是一个明智的决定。该库的优势在于它包含测试用例,并且比人们提出自己的错误实现有更好的工作机会(请参见下面的几个示例)。话虽如此,我明白编写自己的快速函数(如果你做对了)可以避免包含一个依赖项——每个依赖项。
2021-04-01 08:59:55
但是您正在为您的项目添加另一个依赖项以实现如此简单的功能。这对我来说是禁忌。
2021-04-04 08:59:55
对,虽然相当数量的软件需要处理 2000 年,但 2000 年也是闰年。所以除非你的软件需要处理 1900 你很好
2021-04-04 08:59:55
拉一个包裹来检查三个分区的余数,坦率地说是荒谬的。
2021-04-12 08:59:55

您可以使用以下代码检查是否为闰年:

ily = function(yr) {
    return (yr % 400) ? ((yr % 100) ? ((yr % 4) ? false : true) : false) : true;
}
这几乎是在骚扰三元运算符
2021-04-01 08:59:55
这将是低效的,因为它总是检查一年是否可以被 400 整除。你得到 399 次False和一次True
2021-04-03 08:59:55
这似乎只是对已接受答案的重构。它不再紧凑或执行任何不同的操作,所以我不确定它会增加什么value。
2021-04-10 08:59:55
能不能说的详细一点?
2021-04-11 08:59:55