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的问题。