Я настроил jQuery datepicker, который принимает дату рождения и хотел бы использовать выбранную дату для вывода определенной категории, сравнивающей введенную дату с минимальными и максимальными датами для каждой категории. На данный момент у меня проблемы с фактическим сравнением дат, и я надеялся, что смогу получить совет. Я знаю, что сейчас проблема заключается в том, что я пытаюсь сравнить строку и строку, но я хотел бы знать, должен ли я преобразовывать каждую из дат в нечто вроде значения unix для сравнения или есть Date()
Я должен использовать каждый из моих ageLimits
JS
var ageLimits = {
'under10': {
'minAge': '06-05-2005',
'maxAge': '07-04-2004'
},
'under13': {
'minAge': '08-04-2003',
'maxAge': '15-08-2001'
},
'under15': {
'minAge': '16-08-2000',
'maxAge': '07-12-1999'
}
}
function getUserDate(val) {
dateInput = moment( $('#datepicker').val(), 'MM-DD-YYYY');
//pass full date to selectAgeCategory
selectAgeCategory( dateInput.format('MM-DD-YYYY') );
}
function selectAgeCategory(date) {
console.log(date);
if( date >= ageLimits.under10.minAge && date <= ageLimits.under10.maxAge ) {
console.log('Under 10 category');
} else if ( date >= ageLimits.under13.minAge && date <= ageLimits.under13.maxAge ) {
console.log('Under 13 category');
} else if ( date >= ageLimits.under15.minAge && date <= ageLimits.under15.maxAge ) {
console.log('Under 15 category');
} else {
console.log('No category available for this age');
}
}
JSFiddle: http://jsfiddle.net/qA9NT/5/
Я вижу, вы уже используете moment
.
Вы можете проанализировать строки даты с помощью moment
и получить собственный объект даты с момента экземпляра, используя toDate
. Тогда вы можете просто естественным образом сравнить Date
объекты Date
.
Date
конструктор Date
может уже анализировать некоторые форматы, поэтому вам даже не нужно использовать moment
для синтаксического анализа.
Обратите внимание, что если вы ageLimits
объект ageLimits
вы можете сразу ageLimits
объекты даты, а не хранить строки.
var date1 = moment("12-25-1995", "MM-DD-YYYY").toDate(),
date2 = moment("12-25-1996", "MM-DD-YYYY").toDate();
if (date1 < date2) console.log('first date is smaller');
Используйте объекты Date
вместо строк.
Вы можете получить объект Date
используя
dateInput._d
dateInput._d
Я не уверен, каковы ваши критерии даты, но если он строго основан на годах, вы можете получить точную дату в прошлом, используя следующее:
var yearsAgo=10
var d=new Date();
d.setYear( d.getFullYear() - yearsAgo) ;
Не требует жесткого кодирования ваших дат тестирования и всегда будет рассчитываться с сегодняшнего дня
Можно затем напрямую сравнивать объекты даты