【问题标题】:jQuery/JavaScript: Is it a date? (Validate whether is a date) [duplicate]jQuery/JavaScript:是约会吗? (验证是否是日期)[重复]
【发布时间】:2011-12-24 15:17:34
【问题描述】:

我有日期选择器,但我找不到验证用户输入是否为日期以及是否遵循所需格式(格式:yyyy-mm-dd)的方法 p>

这是我的日期选择器:

$("input[name='date']").datepicker({ dateFormat: 'yy-mm-dd', changeMonth: true, changeYear: true, numberOfMonths: 3, showButtonPanel: true});

我查看了这个解决方案,“How to validate datepicker to forbid/reject certain dates?”。它看起来很简单,但它只检查是否是周末。它不会检查用户输入的日期、随机数或拼写错误(1231....30-30-2011...30/30/2011...212-565-565...等) .

请拨弄我的小提琴:http://jsfiddle.net/MDa4A/




附加信息(2011 年 11 月 10 日):
(试试这些 jsFiddles 并输入 0-0-0 或 0/0/0)

我根据您的回答想出了一个解决方案。当我使用 "yy-mm-dd" 格式时它可以工作:http://jsfiddle.net/LyEvQ/

但是当我使用不同的格式时它完全没用 (Ej.: "mm/dd/yy"): http://jsfiddle.net/LyEvQ/1/

我需要两者都工作。你能帮忙吗

【问题讨论】:

标签: javascript jquery validation date datepicker


【解决方案1】:
if (Date.parse("some string")) {
   //Valid date
} else {
  //Not a valid date
}

【讨论】:

【解决方案2】:

这样的事情应该可以工作:

jQuery.validator.addMethod("customDateValidator",
    function(value, element) {
        try { jQuery.datepicker.parseDate("mm/dd/yyyy", value); return true; }
        catch(e) { 
            return false;
        }
    },
    "Please enter a valid date"
);

$("input[name='date']").rules("add", { customDateValidator:true });

【讨论】:

  • 你能给我一个 jsFiddle 的例子吗? -我试过你的答案,但我自己无法让它工作=(
  • 如果你仍然在使用 datepicker(你可能是),这似乎是一个比仅仅使用 Date.parse 更好的验证器
  • 如果出现错误“第 10 位缺少数字”或解析不起作用,请尝试 "mm/dd/yy" 而不是“mm/dd/yyyy”
  • 我从未见过 jQuery 验证器投入使用。很酷。为你点赞。谢谢
  • 我认为通过处理异常来验证日期不是一个好主意。 @James Hill 为此提供了更好的解决方案。
【解决方案3】:

使用Date.parse() 方法检查日期是否有效:

var timestamp = Date.parse($("input[name='date']").val()) 

if (isNaN(timestamp) == false) { 
    var d = new Date(timestamp); 
} 

【讨论】:

  • Date.parse 跨浏览器的实现不一致,我不会将其用作验证器。例如,整数 +-20,000 左右是有效的日期 (Date.parse("200000")),但我不想接受它作为输入。
  • 它既不验证日期是否有效,只检查日期是否在 1 到 31 之间,月份在 1 到 12 之间,等等。Date.parse('2000-11-31') == Date.parse('2000-12-01')
  • 我会使用:if(isNaN(Date.parse($("input[name='date']").val()){isNotDate},编写更少的代码应该是总体目标,至少对我来说是这样的。
  • @TGarrett,你不认为可读、可维护的代码应该是目标吗?
  • @jameshill,是的,先生,可读性是所有代码的一个大问题,并且让开发人员在您之后对您的代码进行更改,他们应该非常容易接受,无论此人处于何种编码级别。我所做的是清理了对我来说似乎多余的部分,例如当你可以简单地删除它并在其中添加任何逻辑运算符(例如“!”)时为布尔值设置一个相等运算符,对于大多数编程人员来说一段时间(1-2年),就能很快上手。不同的编码风格是另一个发生的讨论:
猜你喜欢
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2015-11-21
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多