2011-04-26 2 views
1

Мне нужно проверить разные даты с помощью javascript (jquery).Сравнение дат javascript

У меня есть текстовое поле с входной маской из jquery (http://plugins.jquery.com/plugin-tags/inputmask). Маска, которую я использую, - «d/m/y».

Теперь я настроил функцию CustomValidator для проверки даты.

Мне нужны 2 функции. Один, чтобы проверить, больше ли данная дата, чем 18 лет назад. Вы должны быть старше 18 лет. Одна функция, чтобы проверить, нет ли даты в будущем. Это может быть только в прошлом.

Функция, как

function OlderThen18(source, args) { 
} 

function DateInThePast(source, args) { 
} 

Как вы знаете значение, которое вы получите обратно с args.Value является 27/12/1987.

Но как я могу проверить эту дату в функциях? Так что я могу установить args.IsValid в True или False.

Я попытался разобрать строку (27/12/1987), что я вернусь из замаскированного текстового поля в дату, но всегда получаю значение обратно, как 27/12/1988. Итак, как я могу проверить данные даты с другими датами?

+0

Есть ли причина, по которой вы не используете какой-либо плагин для выбора даты? – NT3RP

ответ

1

Простой способ добавить 18 лет к прилагаемой дате и посмотреть, если результат сегодня или раньше, например:

// Input date as d/m/y or date object 
// Return true/false if d is 18 years or more ago 
function isOver18(d) { 
    var t; 
    var now = new Date(); 
    // Set hours, mins, secs to zero 
    now.setHours(0,0,0); 

    // Deal with string input 
    if (typeof d == 'string') { 
    t = d.split('/'); 
    d = new Date(t[2] + '/' + t[1] + '/' + t[0]); 
    } 

    // Add 18 years to date, check if on or before today 
    if (d.setYear && d.getFullYear) { 
    d.setYear(d.getFullYear() + 18); 
    } 
    return d <= now; 
} 

// For 27/4/2011 
isOver18('27/4/2011'); // true 
isOver18('26/4/2011'); // true 
isOver18('28/4/2011'); // false 
+0

Спасибо, это было идеальным решением. – Sven

1

попробовать это начать:

var d = new Date(myDate); 
var now = new Date(); 
if ((now.getFullYear() - d.getFullYear()) < 18) { 
    //do stuff 
} 
+0

Не используйте 'getYear()', если вы не имеете дело с причудами браузера. Используйте 'getFullYear()'. Кроме того, простое вычитание года не будет точно определять, кому-то 18 или нет, например. кто-то родился в 1993/12/31 еще не 18, но 2011 - 1993 = 18. – RobG

+0

@rob - я согласен с 'getFullYear()', но я просто представлял общее решение для OP. Я уверен, что он может вычислить математику самостоятельно :) – Jason

0

объектов JavaScript дата является достаточно гибким и может обрабатывать множество строк даты. Вы можете сравнить два объекта Date или использовать методы интерфейса Date, такие как getSeconds() из getFullYear(), чтобы вывести полезные данные о дате.

См. Date object reference formore подробности.

0

Вам нужно строить, модифицировать и сравнить Date objects - что-то вроде этого :

// str should already be in dd/mm/yyyy format 
function parseDate(str) { 
    var a = str.split('/'); 
    return new Date(parseInt(a[2], 10), // year 
        parseInt(a[1], 10) - 1, // month, should be 0-11 
        parseInt(a[0], 10)); // day 
} 

// returns a date object for today (at midnight) 
function today() { 
    var date = new Date(); 
    date.setHours(0, 0, 0); 
    return date; 
} 

function DateInThePast(str) { 
    // date objects can be compared like numbers 
    // for equality (==) you'll need to compare the value of date.getTime() 
    return parseDate(str) < today(); 
} 

function OlderThan18(str) { 
    // left as an exercise for the reader :-) 
} 
Смежные вопросы