使用条件语句和 while 循环计算 2 个日期之间的闰年 JavaScript
counting leap years between 2 dates using conditional statements & while loops JavaScript
我有一个更大的函数,它计算输入年月日与现在 JavaScript 之间的时间间隔。在我的这部分功能中,我正在测试哪一年更大(因为它的设计方式,它可以采用过去或未来的日期并可以计算时间间隔)......在开始时,我计算了 UTC 的时间间隔,然后将其转换为天数,最终我不得不再次 return 以年、月和日为单位的间隔,因此再次转换间隔。
在本节中,我试图准确计算时间跨度内发生了多少闰年,但由于输入日期可能是未来或过去,我设置了条件语句来查看哪个日期更大,所以我可以遍历时间跨度。无论如何,我在创建这个函数(这只是我的大函数的一小部分)来测试闰年并添加到闰年计数(我想要 returned 所以我可以准确将以天为单位的时间间隔转换为年、月和日)。我觉得我的所有这些条件语句的语法都有点不对(我真的是几个月前才开始在 JavaScript 中编程)而且我不知道如何在 "year" 中分配变量闰年算法测试之前测试所以我可以测试它,因为我希望年份是 2 年(yearNow 和 yearThen)之间的所有年份......无论如何,任何帮助将不胜感激:
var leapYear = function (inputYear, inputMonth, inputDay) {
var now = new Date();
var yearNow= now.getFullYear();
var then = new Date(inputYear, (inputMonth-1), inputDay);
var yearThen = then.getFullYear;
var leapYearCount = 0;
var beginYear = 0;
if (yearNow < yearThen)
beginYear = yearNow;
while (beginYear < yearThen) {
if ((year & 3) === 0 && ((year % 25) !== 0 || (year & 15) === 0))
leapYearCount += 1;
beginYear++;
}
if (yearThen < yearNow)
beginYear = yearThen;
while (beginYear < yearNow) {
if ((year & 3) === 0 && ((year % 25) !== 0 || (year & 15) === 0))
leapYearCount += 1;
beginYear++;
}
return leapYearCount;
};
编辑** 我尝试将此处的内容设置为 "year" 为 "beginYear" 但最终在 2005 年到现在之间得到了 489 个闰年,这绝对是不正确的 - 我觉得我可能正在做某事除了没有分配 "year" 之外,这个函数还有其他错误,但我不确定是什么...任何帮助将不胜感激。
这将计算您的闰年,请记住,如果是闰年,它会将当前年份也算作闰年,如果是闰年,它还会将起始年算作闰年。
var countLeapYears = function(y,m,d){
var yearNow = new Date().getFullYear(),
yearThen = y,
beginYear = 0,
endYear = 0,
leapYearCount = 0;
var isLeapYear = function(year){
return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
if(yearNow < y){
beginYear = yearNow;
endYear = y;
}else if(yearNow > y){
beginYear = y;
endYear = yearNow;
}else if(yearNow == y){
beginYear = y;
endYear = y;
}
for(i = beginYear; i <= endYear; i++){
if(isLeapYear(i)){
leapYearCount++;
}
}
return leapYearCount;
}
console.log(countLeapYears(2005,10,12)); // 3
console.log(countLeapYears(2020,10,12)); // 2
console.log(countLeapYears(2016,10,12)); // 1
我有一个更大的函数,它计算输入年月日与现在 JavaScript 之间的时间间隔。在我的这部分功能中,我正在测试哪一年更大(因为它的设计方式,它可以采用过去或未来的日期并可以计算时间间隔)......在开始时,我计算了 UTC 的时间间隔,然后将其转换为天数,最终我不得不再次 return 以年、月和日为单位的间隔,因此再次转换间隔。 在本节中,我试图准确计算时间跨度内发生了多少闰年,但由于输入日期可能是未来或过去,我设置了条件语句来查看哪个日期更大,所以我可以遍历时间跨度。无论如何,我在创建这个函数(这只是我的大函数的一小部分)来测试闰年并添加到闰年计数(我想要 returned 所以我可以准确将以天为单位的时间间隔转换为年、月和日)。我觉得我的所有这些条件语句的语法都有点不对(我真的是几个月前才开始在 JavaScript 中编程)而且我不知道如何在 "year" 中分配变量闰年算法测试之前测试所以我可以测试它,因为我希望年份是 2 年(yearNow 和 yearThen)之间的所有年份......无论如何,任何帮助将不胜感激:
var leapYear = function (inputYear, inputMonth, inputDay) {
var now = new Date();
var yearNow= now.getFullYear();
var then = new Date(inputYear, (inputMonth-1), inputDay);
var yearThen = then.getFullYear;
var leapYearCount = 0;
var beginYear = 0;
if (yearNow < yearThen)
beginYear = yearNow;
while (beginYear < yearThen) {
if ((year & 3) === 0 && ((year % 25) !== 0 || (year & 15) === 0))
leapYearCount += 1;
beginYear++;
}
if (yearThen < yearNow)
beginYear = yearThen;
while (beginYear < yearNow) {
if ((year & 3) === 0 && ((year % 25) !== 0 || (year & 15) === 0))
leapYearCount += 1;
beginYear++;
}
return leapYearCount;
};
编辑** 我尝试将此处的内容设置为 "year" 为 "beginYear" 但最终在 2005 年到现在之间得到了 489 个闰年,这绝对是不正确的 - 我觉得我可能正在做某事除了没有分配 "year" 之外,这个函数还有其他错误,但我不确定是什么...任何帮助将不胜感激。
这将计算您的闰年,请记住,如果是闰年,它会将当前年份也算作闰年,如果是闰年,它还会将起始年算作闰年。
var countLeapYears = function(y,m,d){
var yearNow = new Date().getFullYear(),
yearThen = y,
beginYear = 0,
endYear = 0,
leapYearCount = 0;
var isLeapYear = function(year){
return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
if(yearNow < y){
beginYear = yearNow;
endYear = y;
}else if(yearNow > y){
beginYear = y;
endYear = yearNow;
}else if(yearNow == y){
beginYear = y;
endYear = y;
}
for(i = beginYear; i <= endYear; i++){
if(isLeapYear(i)){
leapYearCount++;
}
}
return leapYearCount;
}
console.log(countLeapYears(2005,10,12)); // 3
console.log(countLeapYears(2020,10,12)); // 2
console.log(countLeapYears(2016,10,12)); // 1