2011-04-26 315 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 2011-04-27 00:59:08

回答

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 2011-04-27 07:10:42

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 2011-04-27 00:44:10

+0

@rob - 我同意'getFullYear()',但我只是提出了OP的一般解决方案。我相信他可以自己找出数学问题:) – Jason 2011-04-27 00:56:10

0

javascript日期对象是相当灵活,可以处理许多日期字符串。 您可以比较两个Date对象或使用日期接口方法(例如getSeconds(),getFullYear())以推导出有关日期的有用数据。

请参阅Date object reference formore details。

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 :-) 
}