在javascript中检查年份是不是是闰年[重复]
Posted
技术标签:
【中文标题】在javascript中检查年份是不是是闰年[重复]【英文标题】:Check if year is leap year in javascript [duplicate]在javascript中检查年份是否是闰年[重复] 【发布时间】:2013-04-27 12:29:44 【问题描述】: 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”中),我基本上遵循了这个here,所以使用我已经拥有的,我如何检查条目是否是一个飞跃基于这些条件的年份(注意我在实现伪代码时可能做错了,如果有请纠正我) 编辑:注意这需要使用整数而不是日期函数
【问题讨论】:
检查@***.com/questions/8175521/… 问题是我需要处理这个问题,就好像我只使用年份说 2014 作为整数而不是日期值 【参考方案1】:该函数检查二月是否有 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
【讨论】:
我其实最喜欢这个解决方案,因为它不需要任何公历基础知识。 不适用于输入0000
到 0099
@inetphantom 你刚才描述的问题就像反向 y2k
请注意,如果您想检查闰年,那么您可以显示过去或未来某个任意点的正确日期(即 x 天前的日期/日期 x从现在开始的天数),您可以只使用“new Date(todays_year, todays_month, todays_day + x));”,其中 todays_year、todays_month 和 todays_day 您可以从单独的 Date 对象中检索。也就是说,您根本不需要检查闰年。【参考方案2】:
Kevin P. Rice 在这里提供了一个更快的解决方案:https://***.com/a/11595914/5535820 代码如下:
function leapYear(year)
return (year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0);
【讨论】:
这个更简洁:!(y&3||y&15&&!(y%25))
且可读性较差@ReinstateMonica3167040
@elad.chen 同意,我必须评论说,因为 cmets 接受的答案。回想起来,这有点傻:除了试图让它难以阅读之外,没有任何真正的好处......
@elad.chen 或包含此帖子的链接以使其更具可读性!【参考方案3】:
我的代码很容易理解
var year = 2015;
var LeapYear = year % 4;
if (LeapYear==0)
alert("This is Leap Year");
else
alert("This is not leap year");
【讨论】:
您的代码不正确。 1900 年不是闰年,但您的代码会说是闰年。 既不是很容易理解,也不是很正确。 @GustvandeWal 代码不正确,-10 downs 0 ups,讨论到此结束。 @EugenSunic Lol,多么可悲的反应。很容易理解,讨论到此结束。【参考方案4】:如果您在 Node.js 应用程序中执行此操作,则可以使用 leap-year 包:
npm install --save leap-year
然后在您的应用中,使用以下代码验证提供的年份或日期对象是否为闰年:
var leapYear = require('leap-year');
leapYear(2014);
//=> false
leapYear(2016);
//=> true
使用这样的库的优点是您不必处理正确处理所有特殊情况的肮脏细节,因为库会处理这些问题。
【讨论】:
但是您正在为您的项目添加另一个依赖项以实现如此简单的功能。这对我来说是一个禁忌。 拉入一个包来检查三个除法余数是荒谬的。 是吗?如果您查看此问题中的错误答案(人们只是除以 4 并检查余数),对于某些人来说,使用库可能是一个明智的决定。该库的优势在于它包含测试用例,并且比人们提出自己的错误实现有更好的工作机会(参见下面的几个示例)。话虽如此,我知道编写自己的快速函数(如果你做对了)可以让你免于包含一个依赖项——每个依赖项。 另一方面,无论如何,所有这些都可能是矫枉过正。简单的year % 4
不起作用的下一年是 2100,今天构建的大多数软件无论如何都不会看到。如果你喜欢,添加 您可以使用以下代码检查是否是闰年:
ily = function(yr)
return (yr % 400) ? ((yr % 100) ? ((yr % 4) ? false : true) : false) : true;
【讨论】:
您能详细说明一下吗? 这似乎只是对已接受答案的重构。它不再紧凑或执行任何不同的操作,所以我不确定它会增加什么价值。 这简直是在骚扰三元运算符 这将是低效的,因为它总是检查一年是否可以被 400 整除。你得到 399 次False
和一次 True
【参考方案6】:
您可以尝试使用 javascript 的日期对象
new Date(year,month).getFullYear()%4==0
这将返回真或假。
【讨论】:
它不处理特殊情况(被 100 和 400 整除)。【参考方案7】:function leapYear(year)
return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
【讨论】:
仅供参考:这似乎比isLeap
(下)性能要好得多——jsfiddle.net/atwright147/7dqzvzpr
有史以来最快的!!!可以简化为 ... 加速位函数 isLeap (y) return !((y % 4) || (!(y % 100) && y % 400));
@fedeghe 在我阅读您的评论之前,我认为我已经做了最简洁的!(y%4)&&(!(y%400)||!!(y%100));
,但是您执行了逆逻辑并保存了两个字符!哈哈。做得很好。
@fedeghe !(y&3||y&15&&!(y%25));
怎么样?详情请见***.com/q/9852837/3167040!
次要的挑剔,但在大多数情况下,使用严格(不)相等运算符“===”是正确的。以上是关于在javascript中检查年份是不是是闰年[重复]的主要内容,如果未能解决你的问题,请参考以下文章
html里JavaScript编写输入任意一年判断二月有几天(是不是是闰年)的程序?
用java定义一个判断闰年的方法,在main方法中调用该方法判断输入的一个年份是不是是闰年!