javascript中比较日期的问题

javascript中比较日期的问题,javascript,Javascript,嗨 我有以下代码用于比较两个日期: var d = ($('#day').val()); var m = ($('#month').val() -1); var y = $('#year').val(); var birthdate = new Date(y,m,d); alert('birthdate is' + birthdate); var today = new Date(); alert('today is'+ today); var diff = (today -

我有以下代码用于比较两个日期:

 var d = ($('#day').val());
 var m = ($('#month').val() -1);
 var y = $('#year').val(); 
 var birthdate = new Date(y,m,d);
 alert('birthdate is' + birthdate);
 var today = new Date();
 alert('today is'+ today); 
 var diff = (today - birthdate);
 years = Math.floor(diff/(1000*60*60*24*365));
 alert(years);
这基本上是可行的,但我有兴趣看看用户的出生日期是否超过18岁。所以我试着把它放在1993年3月30日,这会让用户17岁。我正在提醒我的生日,它会给我返回正确的日期(1993年3月29日星期一00:00:00 GMT+0100 BST)…然而,这是评估到18(警报(年)在上述代码中)时,它应该评估到17。直到我在1993年4月3日把它计算为17


有什么想法吗

那是因为你忘了闰年

这些年份有366天,通常每四年发生一次,因此在任何18年中,大约有四天超过365*18,因此将必要的开始日期提前了四天

可能在这种情况下更容易检查

if ((nowyear - birthyear > 18) 
   || ((nowyear - birthyear == 18)&&(nowmonth - birthmonth > 0))
   || ((nowyear - birthyear == 18)&&(nowmonth == birthmonth)&&(nowday - birthday >= 0)))
  // you're 18!

那是因为你忘了闰年

这些年份有366天,通常每四年发生一次,因此在任何18年中,大约有四天超过365*18,因此将必要的开始日期提前了四天

可能在这种情况下更容易检查

if ((nowyear - birthyear > 18) 
   || ((nowyear - birthyear == 18)&&(nowmonth - birthmonth > 0))
   || ((nowyear - birthyear == 18)&&(nowmonth == birthmonth)&&(nowday - birthday >= 0)))
  // you're 18!

如果你在寻找年龄,为什么不走简单的路线,处理年、月、日

function findAge( birthday ){
   var today = new Date();
   var age = today.getFullYears() - birthday.getFullYears();
   if( today.getMonth() - birthday.getMonth() < 0 ){
      age--;
   }
   else if( today.getDay() - birthday.getDay() < 0 && today.getMonth() == birthday.getMonth() ){
      age--;
   }
}
函数findAge(生日){
var today=新日期();
var age=today.getFullYears()-生日.getFullYears();
如果(今天.getMonth()-生日.getMonth()<0){
年龄--;
}
else if(today.getDay()-birth.getDay()<0&&today.getMonth()==birth.getMonth()){
年龄--;
}
}

如果你在寻找年龄,为什么不走简单的路线,处理年、月、日

function findAge( birthday ){
   var today = new Date();
   var age = today.getFullYears() - birthday.getFullYears();
   if( today.getMonth() - birthday.getMonth() < 0 ){
      age--;
   }
   else if( today.getDay() - birthday.getDay() < 0 && today.getMonth() == birthday.getMonth() ){
      age--;
   }
}
函数findAge(生日){
var today=新日期();
var age=today.getFullYears()-生日.getFullYears();
如果(今天.getMonth()-生日.getMonth()<0){
年龄--;
}
else if(today.getDay()-birth.getDay()<0&&today.getMonth()==birth.getMonth()){
年龄--;
}
}

你必须考虑闰年、时区。。。在重新发明轮子之前,我建议您使用


你必须注意闰年,时区。。。在重新发明轮子之前,我建议您使用


试着看一看

试着看一看

闰年把事情搞砸了有关日历年的更多信息,请参见。闰年把事情搞砸了有关日历年的更多信息,请参见。当然。时间和日期混乱且不一致。涉及它们的手动解决方案几乎总是包含bug。如果可能,最好使用经过良好测试的库。这不起作用。我只是得到并错误地说(18).years().ago().isBefore不是一个函数…我确实包含了这个库。这个库正在进行alpha测试。我刚刚用它做了一些简单的计算,它不是可靠性故障
isBefore
是在alpha发布之后引入的。如果使用的是
datejs
,最好使用最新版本。当然。时间和日期混乱且不一致。涉及它们的手动解决方案几乎总是包含bug。如果可能,最好使用经过良好测试的库。这不起作用。我只是得到并错误地说(18).years().ago().isBefore不是一个函数…我确实包含了这个库。这个库正在进行alpha测试。我刚刚用它做了一些简单的计算,它不是可靠性故障
isBefore
是在alpha发布之后引入的。如果使用
datejs
最好使用的是最新版本。您的上一个条件只检查月份是否相等,当前日期是否大于生日,但不检查年份。我不知道如何将日期拆分为年和月。我已将出生年份/月份/日期拆分,但如何创建今天的日期并以月/日/年为单位?您的上一个条件仅检查月份是否相等,当前日期是否大于生日,但不检查年份。我不知道如何将日期拆分为年和月。我将出生年份/月份/日期分开,但如何创建今天的日期并以月/日/年为单位?这没有回答OP的问题。这没有回答OP的问题。