我已经设置了一个jQuery数据报警器,它接受出生日期,并希望使用选定的日期输出特定的类别,比较输入的日期与每个类别的最小和最大日期。目前,我在比较日期的时候遇到了问题,我希望能得到一些建议。我现在知道我的问题是因为我试图比较一个字符串和一个字符串,但是我想知道是将每个日期转换成一个类似unix值的东西来进行比较,还是在我的每个ageLimits上都应该使用一些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/
发布于 2013-12-14 19:58:57
我看你已经在使用moment了。
您可以使用moment解析日期字符串,并使用toDate从瞬间实例中获取本机日期对象。然后,您可以自然地比较本地Date对象。
本机Date构造函数已经可以解析某些格式,因此您甚至可能不需要使用moment进行解析。
注意,如果硬编码ageLimits对象,可以立即构造date对象,而不是存储字符串。
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');发布于 2013-12-14 19:50:59
使用Date对象而不是字符串。
可以使用以下方法获取Date对象
dateInput._d发布于 2013-12-14 20:03:34
我不知道您的日期标准是什么,但是如果它严格地基于年份,您可以使用以下方法获得确切的日期:
var yearsAgo=10
var d=new Date();
d.setYear( d.getFullYear() - yearsAgo) ;不需要对测试日期进行任何硬编码,并且将始终从今天的日期计算
然后可以直接比较日期对象。
https://stackoverflow.com/questions/20587494
复制相似问题