JavaScript - 验证日期

时间:2009-11-19 21:03:20

标签: javascript datetime validation

我有一个HTML文本字段。我想通过JavaScript验证输入的值是“MM / DD / YY”或“MM / D / YY”或“MM / DD / YYYY”或“MM / D / YYYY”形式的有效日期。有没有这样做的功能?

我有点假设有类似isNaN的东西,但我没有看到任何东西。 JavaScript无法验证日期吗?

11 个答案:

答案 0 :(得分:9)

  

JavaScript无法验证日期吗?

没有

  

有没有这样做的功能?

没有。

您需要编写自己的验证函数来解析日期格式(想到正则表达式),然后根据您的特定条件确定它是否有效。

答案 1 :(得分:7)

您可以使用javascript自己的Date对象来检查日期。由于日期对象允许使用月和日值(例如3月32日将更正为4月1日),您可以检查您创建的日期是否与您放入的日期相匹配。如果您需要,可以缩短此项,但为了清晰起见,时间会更长。

function checkDate(m,d,y)
{
   try { 

      // create the date object with the values sent in (month is zero based)
      var dt = new Date(y,m-1,d,0,0,0,0);

      // get the month, day, and year from the object we just created 
      var mon = dt.getMonth() + 1;
      var day = dt.getDate();
      var yr  = dt.getYear() + 1900;

      // if they match then the date is valid
      if ( mon == m && yr == y && day == d )
         return true; 
      else
         return false;
   }
   catch(e) {
      return false;
   }
}

答案 2 :(得分:2)

结帐http://momentjs.com/。使用它,这个片段

时刻(yourCandidateString,'MM-DD-YYYY')。isValid()

应该做的。

答案 3 :(得分:1)

如果你想进入JQuery领域,有很多验证插件,包括日期验证。 This plugin是我曾经使用过几次并为我提供的服务。

答案 4 :(得分:1)

我使用Bootstrap Datepicker。禁用文本框的其中一个选项应该可以解决问题。

http://www.eyecon.ro/bootstrap-datepicker/

答案 5 :(得分:1)

<input type="text" id="dateinput"/>

<script type="text/javascript">
   $(#"dateinput").datepicker({
       buttonImage: "images/calendar.png",
       dateFormat: "yyyy-MMM-dd"
   });

   function validateDate() {
       if ($(#"dateinput").val().trim() == "") {
           // Is a blank date allowed?
           return true;
       }
       var oldVal = $(#"dateinput").val();   // Current value in textbox
       // Now use jQueryUI datepicker to try and set the date with the current textbox value
       $(#"dateinput").datepicker("setDate",$(#"dateinput").val());
       // Check if the textbox value has changed
       if (oldVal != $(#"dateinput").val()) {
           // The datepicker will set something different if the date is invalid
           $(#"dateinput").val(oldVal);  // Set the textbox back to the invalid date
           alert ("date was invalid");
           return false;
       } else {
           // If nothing changed, the date must be good.
           return true;
       }
   }
</script>

答案 6 :(得分:1)

似乎没有内置功能可以做到这一点。但是,这段代码可能就是你要找的东西:

<script type="text/javascript">

/**--------------------------
//* Validate Date Field script- By JavaScriptKit.com
//* For this script and 100s more, visit http://www.javascriptkit.com
//* This notice must stay intact for usage
---------------------------**/

function checkdate(input){
    var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
    var returnval=false
    if (!validformat.test(input.value))
        alert("Invalid Date Format. Please correct and submit again.")
    else{ //Detailed check for valid date ranges
        var monthfield=input.value.split("/")[0]
        var dayfield=input.value.split("/")[1]
        var yearfield=input.value.split("/")[2]
        var dayobj = new Date(yearfield, monthfield-1, dayfield)
        if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
            alert("Invalid Day, Month, or Year range detected. Please correct and submit again.")
        else
            returnval=true
    }
    if (returnval==false) input.select()
    return returnval
}

</script>

来源:http://www.javascriptkit.com/script/script2/validatedate.shtml

答案 7 :(得分:0)

你有搜索过类似javascript date validation的内容吗?它显示了一些很好的信息,以及一个有效的代码示例here

答案 8 :(得分:0)

我建议你提供几种解决方案。

  1. 使用日期选择器指导用户输入。这样您就可以控制输入格式。 jQueryui datepicker是一种流行的实现。

  2. 使用js库来管理日期时间数据类型(不是Javascript中的实际数据类型!!)。我建议你date.js

答案 9 :(得分:0)

这是我用来验证日期的方法。

Date.parse为无效日期返回NaN。

这支持仅日期和日期+时间格式。

希望这有帮助。

var msg;
var str = "2013-12-04 23:10:59";
str = "2012/12/42";
var resp = Date.parse(str);
if(!isNaN(resp)) { msg='valid date'; } else { msg='invalid date'; }
console.log(msg);

答案 10 :(得分:0)

类似于 this 答案,Date 可用于检查字符串的解析版本是否对应于原始日期字符串。

> datestring_valid = "2020-02-29";
> parsed_Date = new Date(datestring_valid);
> parsed_Date.toISOString().slice(0,10) == datestring_valid;
true
> datestring_invalid = "2021-02-29";
> parsed_Date = new Date(datestring_invalid);
> parsed_Date.toISOString().slice(0,10) == datestring_invalid;
false

注意:这要求日期字符串采用 ISO 格式。

这样做的原因是,Date 将一些无效日期解析为有效日期,如上例所示。但是,将“2020-01-32”提供给 Date 将导致结果为 "Invalid Date",即 isNaN

处理所有这些的函数如下:

function isValidDateString(datestring) {
  parsed_Date = new Date(datestring);
  return (parsed_Date.toISOString().slice(0,10) == datestring) && !isNaN(parsed_Date)
};
> isValidDateString(datestring_valid)
true
> isValidDateString(datestring_invalid)
false