在javascript中比较日期的问题

时间:2011-03-29 13:28:42

标签: javascript

HI,

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

 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.我正在提醒出生日期并且它给了我正确的日期(mon mar 29 1993 00:00:00 GMT + 0100 BST)。 ...但是当评估为17时,这将评估为18(上述代码中的警报(年))。直到我在1993年4月3日提出它评估为17。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

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

if((18).years().ago().isBefore(birthdate)) {
  // handle underage visitors
}

答案 1 :(得分:1)

那是因为你忘记了闰年。

这些年有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!

答案 2 :(得分:1)

如果您正在寻找年龄,为什么不走简单路线并处理数年,数月和数日?

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--;
   }
}

答案 3 :(得分:-1)

尝试查看this post