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。
有什么想法吗?
答案 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