2011-04-02 140 views
11

我错过了下面的jQuery代码中的东西?jquery年龄计算

var dob = $('#date').val(); 
if(dob != ''){ 
    var today = new Date(); 
    var dayDiff = Math.ceil(today - dob)/(1000 * 60 * 60 * 24 * 365); 
    var age = parseInt(dayDiff); 
    $('#age').html(age+' years old'); 
} 

我从MySQL数据库获取#date的预取值。

<input type="text" value="1988-04-07" id="#date" name="dob" /><p id="age"></p> 

它返回NaN,而不是正确的值。

+2

'id =“#date”'??? – esqew 2011-04-02 17:41:41

+1

不,它可能会返回'NaN',代表“不是数字”。 – 2011-04-02 17:57:46

回答

35

$('#date').val()返回字符串'1988-04-07'。你需要把它解析成一个实际的数字。

dob = new Date(dob); 
var today = new Date(); 
var age = Math.floor((today-dob)/(365.25 * 24 * 60 * 60 * 1000)); 
$('#age').html(age+' years old'); 

由于@esqew所指出的,你也需要改变id="#date"id="date"

+0

我错过了,谢谢。 – seoppc 2011-04-02 17:57:13

+0

@ matt-ball'dob = new Date(dob); “如果日数大于12,这种转换对我来说就不合适了。为什么那个..你能帮我解决这个问题吗? – Aju 2017-06-14 06:47:45

2
function getAge(dateString) { 
    var now = new Date(); 
    var today = new Date(now.getYear(),now.getMonth(),now.getDate()); 

    var yearNow = now.getYear(); 
    var monthNow = now.getMonth(); 
    var dateNow = now.getDate(); 
//date must be mm/dd/yyyy 
    var dob = new Date(dateString.substring(6,10), 
        dateString.substring(0,2)-1,     
        dateString.substring(3,5)     
        ); 

    var yearDob = dob.getFullYear(); 
    var monthDob = dob.getMonth(); 
    var dateDob = dob.getDate(); 
    var age = {}; 
    var ageString = ""; 
    var yearString = ""; 
    var monthString = ""; 
    var dayString = ""; 


    yearAge = yearNow - yearDob; 

    if (monthNow >= monthDob) 
    var monthAge = monthNow - monthDob; 
    else { 
    yearAge--; 
    var monthAge = 12 + monthNow -monthDob; 
    } 

    if (dateNow >= dateDob) 
    var dateAge = dateNow - dateDob; 
    else { 
    monthAge--; 
    var dateAge = 31 + dateNow - dateDob; 

    if (monthAge < 0) { 
     monthAge = 11; 
     yearAge--; 
    } 
    } 

    age = { 
     years: yearAge, 
     months: monthAge, 
     days: dateAge 
     }; 

    if (age.years > 1) yearString = " years"; 
    else yearString = " year"; 
    if (age.months> 1) monthString = " months"; 
    else monthString = " month"; 
    if (age.days > 1) dayString = " days"; 
    else dayString = " day"; 


    if ((age.years > 0) && (age.months > 0) && (age.days > 0)) 
    ageString = age.years + yearString + ", " + age.months + monthString + ", and " + age.days + dayString + " old."; 
    else if ((age.years == 0) && (age.months == 0) && (age.days > 0)) 
    ageString = "Only " + age.days + dayString + " old!"; 
    else if ((age.years > 0) && (age.months == 0) && (age.days == 0)) 
    ageString = age.years + yearString + " old. Happy Birthday!!"; 
    else if ((age.years > 0) && (age.months > 0) && (age.days == 0)) 
    ageString = age.years + yearString + " and " + age.months + monthString + " old."; 
    else if ((age.years == 0) && (age.months > 0) && (age.days > 0)) 
    ageString = age.months + monthString + " and " + age.days + dayString + " old."; 
    else if ((age.years > 0) && (age.months == 0) && (age.days > 0)) 
    ageString = age.years + yearString + " and " + age.days + dayString + " old."; 
    else if ((age.years == 0) && (age.months > 0) && (age.days == 0)) 
    ageString = age.months + monthString + " old."; 
    else ageString = "Oops! Could not calculate age!"; 

    return ageString; 
} 

// A bit of jQuery to call the getAge() function and update the page... 
$(document).ready(function() { 
    $("#submitDate").click(function(e) { 
    e.preventDefault(); 

    $("#age").html(getAge($("input#date").val())); 

    }); 
}); 

and HTML IS 
+0

var yearDob = dob.getYear(); 应该是 var yearDob = dob.getFullYear(); – Mani 2016-03-17 08:17:28

1

首先在文本中提到的ID不应包含“#”

我还创建了一个fiddle

哎呀我had't检查它被张贴的日期

0
$("#dob").change(function(){ 

    var today = new Date(); 
    var birthDate = new Date($('#dob').val()); 
    var age = today.getFullYear() - birthDate.getFullYear(); 
    var m = today.getMonth() - birthDate.getMonth(); 
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { 
     age--; 
    } 
    return $('#age').html(age+' years old'); 
}); 

它对我有用