在使用Javascript确定两个日期之间的差异时,我如何考虑闰年?



我正在尝试设置一个计数器来确定过去日期和当前日期之间的差异。

我已经设法设置了一个计数器来确定两个点之间的秒数,使用以下代码将结果划分为年、日、小时、分钟、秒:

var lastDay = new Date("Jan 1, 1994  00:00:01").getTime(); 
var x = setInterval(function() { 
var now = new Date().getTime(); 
var t = now - lastDay; 
var years = Math.floor(t / (1000 * 60 * 60 * 24)/ 365);
var days = Math.floor((t % (1000 * 60 * 60 * 24 * 365))/(1000 * 60 * 60 * 24)); 
var hours = Math.floor((t % (1000 * 60 * 60 * 24))/(1000 * 60 * 60)); 
var minutes = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)); 
var seconds = Math.floor((t % (1000 * 60)) / 1000); 
document.getElementById("year").innerHTML =years ; 
document.getElementById("day").innerHTML =days ; 
document.getElementById("hour").innerHTML =hours; 
document.getElementById("minute").innerHTML = minutes;  
document.getElementById("second").innerHTML =seconds;  
if (t < 0) { 
clearInterval(x); 
document.getElementById("demo").innerHTML = "TIME UP"; 
document.getElementById("year").innerHTML ='0'; 
document.getElementById("day").innerHTML ='0'; 
document.getElementById("hour").innerHTML ='0'; 
document.getElementById("minute").innerHTML ='0' ;  
document.getElementById("second").innerHTML = '0'; } 
}, 1000);

我的问题是,它没有考虑闰年,因此"天"的数字是不准确的。它应该再增加7天,以说明设置日期与当前日期(撰写本文时)之间的闰年数。

我尝试使用下面的代码来计算闰年:

var countLeapYears = function(){
var yearNow = new Date().getFullYear(); 
var then = new Date("Jan 1, 1994 00:00:01");
var yearThen = then.getFullYear();
var beginYear = 0;
var endYear = 0;
var leapYearCount = 0;
var isLeapYear = function(year){
return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
}
if(yearNow < y){
beginYear = yearNow;
endYear = yearThen;
}else if(yearNow > yearThen){
beginYear = yearThen;
endYear = yearNow;
}else if(yearNow == yearThen){
beginYear = yearThen;
endYear = yearThen;
}
for(i = beginYear; i <= endYear; i++){
if(isLeapYear(i)){
leapYearCount++;
}
}
return leapYearCount;
}

然后尝试将'leapYearCount'添加到'days',但失败了:

var countLeapYears = function(){
var yearNow = new Date().getFullYear(); 
var then = new Date("Jan 1, 1994 00:00:01");
var yearThen = then.getFullYear();
var beginYear = 0;
var endYear = 0;
var leapYearCount = 0;
var isLeapYear = function(year){
return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
}
if(yearNow < y){
beginYear = yearNow;
endYear = yearThen;
}else if(yearNow > yearThen){
beginYear = yearThen;
endYear = yearNow;
}else if(yearNow == yearThen){
beginYear = yearThen;
endYear = yearThen;
}
for(i = beginYear; i <= endYear; i++){
if(isLeapYear(i)){
leapYearCount++;
}
}
return leapYearCount;
}
var lastDay = new Date("Jan 1, 1994 00:00:01").getTime(); 
var x = setInterval(function() { 
var now = new Date().getTime(); 
var t = now - lastDay; 
var years = Math.floor(t / (1000 * 60 * 60 * 24)/ 365);
var days = Math.floor((t % (1000 * 60 * 60 * 24 * 365))/(1000 * 60 * 60 * 24) + leapYearCount); 
var hours = Math.floor((t % (1000 * 60 * 60 * 24))/(1000 * 60 * 60)); 
var minutes = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)); 
var seconds = Math.floor((t % (1000 * 60)) / 1000); 
document.getElementById("year").innerHTML =years ; 
document.getElementById("day").innerHTML =days ; 
document.getElementById("hour").innerHTML =hours; 
document.getElementById("minute").innerHTML = minutes;  
document.getElementById("second").innerHTML =seconds;  
if (t < 0) { 
clearInterval(x); 
document.getElementById("demo").innerHTML = "TIME UP"; 
document.getElementById("year").innerHTML ='0'; 
document.getElementById("day").innerHTML ='0'; 
document.getElementById("hour").innerHTML ='0'; 
document.getElementById("minute").innerHTML ='0' ;  
document.getElementById("second").innerHTML = '0'; } 
}, 1000);

有什么想法我可以纠正这一点,并添加额外的日子,以说明已经过去的闰年的数量?

许多谢谢。

答案比我想象的要简单得多。

由于我只是想把闰年的天数差异考虑进去,我只需要把年数除以4,再加1,就像这样:

var lastDay = new Date("Jan 1, 1994 10:00:00").getTime(); 
var x = setInterval(function() { 
var now = new Date().getTime(); 
var t = now - lastDay; 
var years = Math.floor(t / (1000 * 60 * 60 * 24)/ 365);
var leapDays = Math.floor((years / 4) + 1);
var days = Math.floor((t % (1000 * 60 * 60 * 24 * 365))/(1000 * 60 * 60 * 24) - leapDays); 
var hours = Math.floor((t % (1000 * 60 * 60 * 24))/(1000 * 60 * 60)); 
var minutes = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)); 
var seconds = Math.floor((t % (1000 * 60)) / 1000); 
document.getElementById("year").innerHTML =years ; 
document.getElementById("day").innerHTML =days ; 
document.getElementById("hour").innerHTML =hours; 
document.getElementById("minute").innerHTML = minutes;  
document.getElementById("second").innerHTML =seconds;  
if (t < 0) { 
clearInterval(x); 
document.getElementById("demo").innerHTML = "TIME UP"; 
document.getElementById("year").innerHTML ='0'; 
document.getElementById("day").innerHTML ='0'; 
document.getElementById("hour").innerHTML ='0'; 
document.getElementById("minute").innerHTML ='0' ;  
document.getElementById("second").innerHTML = '0'; } 
}, 1000);

最新更新