jQuery/JavaScript:是约会吗? (验证是不是是日期)[重复]

Posted

技术标签:

【中文标题】jQuery/JavaScript:是约会吗? (验证是不是是日期)[重复]【英文标题】: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/

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

【问题讨论】:

***.com/questions/3880615/isdate-in-jquery 请用你的答案更新我的小提琴:http://jsfiddle.net/MDa4A/ 【参考方案1】:
if (Date.parse("some string")) 
   //Valid date
 else 
  //Not a valid date

【讨论】:

您能详细说明一下吗? w3schools.com/jsref/jsref_parse.asp 这是不正确的,因为它返回数字而不是 NaN,例如2014-11-31 不存在。【参考方案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年),就能很快上手。不同的编码风格是另一个发生的讨论:

以上是关于jQuery/JavaScript:是约会吗? (验证是不是是日期)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

好的jQuery/Javascript不能有很多注释吗?

如何使用Jquery / JavaScript完全删除canvas元素?

我可以只使用 jQuery 验证还是需要 PHP? [关闭]

开始日期结束日期验证 -Jquery/javascript - kendoUI

Angular 6 - 集成jQuery / JavaScript文件

使用 jQuery / Javascript (querystring) 获取查询字符串参数 url 值