Javascript JS检查有效的日期格式

Javascript JS检查有效的日期格式,javascript,validation,datetime,Javascript,Validation,Datetime,我有一个文本字段,用户在其中以以下格式输入日期时间:dd/mm/YYYY hh:ii。我想使用javascript检查这是否是有效的日期时间。这应该包括2月29日和所有的事情。我该怎么做?由于特殊月份的原因,正则表达式不会成功。有关检查时间的有用文章,请参阅 下面是文章的全文 在javascript中检查日期 文章于2006年1月31日在脚本下发布 程序员经常需要验证表单中插入的信息,并检查它们的正确性。利用javascript是非常有用的。本教程将解释如何使用javascript来验证日期是否

我有一个文本字段,用户在其中以以下格式输入日期时间:
dd/mm/YYYY hh:ii
。我想使用javascript检查这是否是有效的日期时间。这应该包括2月29日和所有的事情。我该怎么做?由于特殊月份的原因,正则表达式不会成功。

有关检查时间的有用文章,请参阅

下面是文章的全文

在javascript中检查日期 文章于2006年1月31日在脚本下发布 程序员经常需要验证表单中插入的信息,并检查它们的正确性。利用javascript是非常有用的。本教程将解释如何使用javascript来验证日期是否有效。 表单中的日期以两种不同的方式插入,第一种方式使用文本字段,其中用户类型数据遵循不同的模式(在本教程中,我们假设日期为dd-mm-yyyy格式);第二种方法使用下拉菜单。第一种解决方案执行起来更简单,但用户会出现更多错误(例如,插入无效字符或以与计划格式不同的格式更频繁地键入日期)。 假设现在有以下文本字段,我们希望在其中插入dd mm yyyy格式的日期:

<form id="test_form" action="get" method="/checkdatejavascript" 
onsubmit="return(check_form(this)); return false;">
<input type="text" name="datefield" id="datefield" />
</form>
} 正如我们所看到的,蓝色的正则表达式用于控制插入日期是否遵循默认的指定格式。如果模式有效,则函数继续执行下一步,否则将引发错误消息,并且不会发送表单(正则表达式还保证日期不能为空)。 为了验证日期,我们将使用javascript提供的date对象。(检查红色代码)。算法非常简单。使用用户插入的信息,我们将创建一个日期对象,并使用getFullYear、getMonth和getDate方法,我们将生成三个值,分别表示与之关联的年份、月份和日期。如果这些值等于用户插入的值,则日期是正确的。现在考虑下面的例子:

用户在文本字段中插入字符串09-01-1976 从字符串创建的日期对象是09-01-1976 日期有效

用户在文本字段中插入字符串31-02-2006 从字符串创建的日期对象是03-03-2006 日期无效

程序员必须特别注意javascript处理日期的方式(检查以绿色显示的代码),因为假设o为1月,11为12月,月的范围是0到11。 如果使用下拉菜单插入日期,由于正则表达式不需要验证日期格式,因此控件更简单:

  <form id="test_form" action="get" method="/checkdatejavascript" 
   onsubmit="return(check_form(this)); return false;">
  <select name="dateday" id="dateday">
  <option value="1">1</option>
     […]
  </select>
  <select name="datemonth" id="datemonth">
  <option value="0">January</option>
     […]
   </select>
   <select name="dateyear" id="dateyear">
  <option value="2006">2006</option>
     […]
  </select>
  </form>

更新:我已经更新了代码,因为正则表达式有问题。感谢Alex的建议

如果使用moment.js可以,您可以检查日期时间解析实用程序。例如:

moment("29/02/2014 11:45", "DD/MM/YYYY hh:mm", true).isValid()

如果不想使用其他外部库,可以使用以下函数:

var validateDate = function(dateTime){
  var f_date = dateTime.split(" ")[0].split("/").reverse().join("/");
  var time = dateTime.split(" ")[1];

  var date = dateTime.split(" ")[0].split("/").map(function(c, i, a){
        return parseInt(c);
    });
  var daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
  if ( (!(date[2] % 4) && date[2] % 100) || !(date[2] % 400)) {
    console.log("inside");
    daysInMonth[1] = 29;
  }

  if(date[0] > 0 && (date[0] <= daysInMonth[(date[1]-1)]) && date[1] > 0 && date[1] <= 12){
    return new Date(f_date + " " + time) != "Invalid Date";
  }
  return false;
}

如果您使用JQuery,请参阅:@RachelGallen,请将此作为答案提交。昆蒂努克:很好,但不是我想要的。@CamilStaps,恐怕我记不起来了,我有点眼花缭乱。试试谷歌搜索??它可能在其他地方的堆栈上???@CamilStaps我的答案似乎又出现了@我问mods:)这太棒了!如果链接断开,这个答案就没用了。
moment("29/02/2014 11:45", "DD/MM/YYYY hh:mm", true).isValid()
var validateDate = function(dateTime){
  var f_date = dateTime.split(" ")[0].split("/").reverse().join("/");
  var time = dateTime.split(" ")[1];

  var date = dateTime.split(" ")[0].split("/").map(function(c, i, a){
        return parseInt(c);
    });
  var daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
  if ( (!(date[2] % 4) && date[2] % 100) || !(date[2] % 400)) {
    console.log("inside");
    daysInMonth[1] = 29;
  }

  if(date[0] > 0 && (date[0] <= daysInMonth[(date[1]-1)]) && date[1] > 0 && date[1] <= 12){
    return new Date(f_date + " " + time) != "Invalid Date";
  }
  return false;
}
validateDate("29/2/2000 12:30"); // Should return true
validateDate("29/2/2001 12:30"); // Should return false
validateDate("32/8/2000 12:30"); // Should return false
validateDate("30/11/2000 12:30"); // Should return true
validateDate("31/4/2000 12:30"); // Should return false
validateDate("15/7/2000 12:77"); // Should return false