Советы о том, как сравнивать входное значение даты с минимальными / максимальными диапазонами дат

0

Я настроил 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/

  • 1
    Хватит хранить и сравнивать даты как строки
  • 0
    Эй, @ Райан, да, я понимаю, что это проблема, но что я должен сделать прямо сейчас, чтобы решить эту проблему?
Теги:
date

3 ответа

1
Лучший ответ

Я вижу, вы уже используете 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');

FIDDLE

  • 0
    эй @plalx спасибо за это, я попытался обновить свою скрипку, но все еще есть проблема со сравнением даты ввода с моими диапазонами. Не могли бы вы посоветовать, где я могу пойти не так? jsfiddle.net/qA9NT/10
  • 0
    @styler Ну, ваши диапазоны дат неверны. Например, минимальная дата для детей младше 10 лет - 2005 год, а максимальная - в 2004 году.
Показать ещё 1 комментарий
1

Используйте объекты Date вместо строк.

Вы можете получить объект Date используя

dateInput._d
  • 0
    Эй, @Oriol, я немного запутался, нужно ли устанавливать каждую дату внутри моего объекта ageLimits с помощью Date ()?
  • 0
    Да, вы должны преобразовать свои ageLimits в объект Date и сравнить их с dateInput._d
1

Я не уверен, каковы ваши критерии даты, но если он строго основан на годах, вы можете получить точную дату в прошлом, используя следующее:

var yearsAgo=10

var d=new Date();
d.setYear( d.getFullYear() - yearsAgo) ;

Не требует жесткого кодирования ваших дат тестирования и всегда будет рассчитываться с сегодняшнего дня

Можно затем напрямую сравнивать объекты даты

Ещё вопросы

Сообщество Overcoder
Наверх
Меню