比较日期javascript

比较日期javascript,javascript,jquery,asp.net,vb.net,Javascript,Jquery,Asp.net,Vb.net,我需要用一些javascript(jquery)验证不同的日期 我有一个文本框,带有来自jquery的输入掩码(http://plugins.jquery.com/plugin-tags/inputmask). 我使用的遮罩是“d/m/y” 现在我已经设置了一个CustomValidator函数来验证日期 我需要2个函数。检查给定日期是否大于18年前。你必须比18岁大。 一个用于检查日期是否在将来的函数。它只能在过去发生 函数如下所示 function OlderThen18(source, a

我需要用一些javascript(jquery)验证不同的日期

我有一个文本框,带有来自jquery的输入掩码(http://plugins.jquery.com/plugin-tags/inputmask). 我使用的遮罩是“d/m/y”

现在我已经设置了一个CustomValidator函数来验证日期

我需要2个函数。检查给定日期是否大于18年前。你必须比18岁大。 一个用于检查日期是否在将来的函数。它只能在过去发生

函数如下所示

function OlderThen18(source, args) {
}

function DateInThePast(source, args) {
}
正如您所知,使用args返回的值。值为
27/12/1987

但是我如何在函数中检查这个日期呢?这样我就可以将
args.IsValid
设置为True或False

我试图解析从屏蔽文本框返回到日期的字符串(
27/12/1987
),但总是返回一个值,如
27/12/1988
。 那么,我如何将给定日期与其他日期进行核对呢?

尝试以下方法开始:

var d = new Date(myDate);
var now = new Date();
if ((now.getFullYear() - d.getFullYear()) < 18) {
    //do stuff
}
var d=新日期(myDate);
var now=新日期();
如果((now.getFullYear()-d.getFullYear())<18){
//做事
}

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


有关更多详细信息,请参见。

简单的方法是将提供的日期加上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
//将日期作为d/m/y或日期对象输入
//如果d为18年或更长时间,则返回true/false
功能isOver18(d){
变量t;
var now=新日期();
//将小时、分钟、秒设置为零
现在,设定小时数(0,0,0);
//处理字符串输入
if(typeof d=='string'){
t=d.split('/');
d=新日期(t[2]+'/'+t[1]+'/'+t[0]);
}
//添加18年至今,检查是否在今天或之前
if(d.setYear&&d.getFullYear){
d、 设置年(d.getFullYear()+18);
}

返回d您将需要构造、修改和比较-类似以下内容:

// 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 :-)
}
//str应该已经是dd/mm/yyyy格式
函数解析日期(str){
var a=str.split('/');
返回新日期(parseInt(a[2],10),//年
parseInt(a[1],10)-1,//month,应该是0-11
parseInt(a[0],10));//天
}
//返回今天(午夜)的日期对象
今日职能({
变量日期=新日期();
设置时间(0,0,0);
返回日期;
}
函数日期过去(str){
//日期对象可以像数字一样进行比较
//对于相等(=),您需要比较date.getTime()的值
返回日期(str)<今天();
}
函数OlderThan18(str){
//留给读者作为练习:-)
}

除非处理浏览器的问题,否则不要使用
getYear()
。使用
getFullYear()
。此外,简单地减去年份将无法准确确定某人是否18岁,例如,1993/12/31出生的人还没有18岁,但2011-1993=18。@rob-我同意
getFullYear()
但我只是为OP提供了一个通用的解决方案。我相信他可以自己解决问题:)你不使用日期选择器插件有什么原因吗?谢谢,这是一个完美的解决方案。