【问题标题】:Compare dates javascript比较日期 javascript
【发布时间】:2011-04-26 20:59:23
【问题描述】:

我需要使用一些 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.Value 返回的值是 27/12/1987

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

我试图将我从蒙面文本框中返回的字符串 (27/12/1987) 解析为一个日期,但我总是得到一个返回值,例如 27/12/1988。 那么如何检查给定日期和其他日期呢?

【问题讨论】:

  • 您是否有理由不使用某种日期选择器插件?

标签: javascript jquery asp.net vb.net


【解决方案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

【讨论】:

  • 谢谢,这是完美的解决方案。
【解决方案2】:

试试这个开始:

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

【讨论】:

  • 除非您处理浏览器怪癖,否则不要使用getYear()。使用getFullYear()。此外,简单地减去年份并不能准确地确定某人是否 18 岁,例如出生于 1993 年 12 月 31 日的人还不到 18 岁,但 2011 - 1993 = 18 岁。
  • @rob - 我同意getFullYear(),但我只是为 OP 提供了一个通用解决方案。我相信他可以自己算出数学:)
【解决方案3】:

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

更多详情请见Date object reference

【讨论】:

    【解决方案4】:

    您需要构造、修改和比较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 :-)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2012-01-04
      • 2011-02-14
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多