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');
}
Я получаю предварительно заданное значение #date из MySQL db.
<input type="text" value="1988-04-07" id="#date" name="dob" /><p id="age"></p>
Он возвращает NaN, а не правильное значение.
Ответы
Ответ 1
$('#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"
.
Ответ 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
Ответ 3
Во-первых, идентификатор, указанный в текстовом поле, не должен содержать '#'
Я также создал fiddle
К сожалению, я не проверял дату, когда она была отправлена на
Ответ 4
$("#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');
});
Это сработало для меня
Ответ 5
jQuery("#dob").on('change',function(){
var dob1 = jQuery(this).val();
var dob = $.datepicker.formatDate('yy-mm-dd', new Date(dob1));
var str = dob.split('-');
var firstdate=new Date(str[0],str[1],str[2]);
var today = new Date();
var dayDiff = Math.ceil(today.getTime() - firstdate.getTime()) / (1000 * 60 * 60 * 24 * 365);
var age = parseInt(dayDiff);
jQuery("#age").html(age+' years old');
});
<input type="text" id="#dob" class="datepicker" name="dob" /><p id="age"></p>
Ответ 6
Вот что сработало у меня пока все остальные дали NaN:
Это работает только если формат dob- мм/дд/гг
function getAge(dob) { return ~~((new Date()-new Date(dob))/(31556952000)) }
$("#dob").val()
$(dob).change(function(){
$('.age').val(getAge($(this).val()));
});
Пожалуйста, смотрите мой jsfiddle http://jsfiddle.net/y9fwm73n/
Ответ 7
Вот что сработало у меня пока все остальные дали NaN:
Это работает только если формат dob- мм/дд/гг
function getAge(dob) { return ~~((new Date()-new Date(dob))/(31556952000)) }
$("#dob").val()
$(dob).change(function(){
$('.age').val(getAge($(this).val()));
});
Пожалуйста, смотрите мой jsfiddle http://jsfiddle.net/Adam_888/98c21nbz/1/