如何确定给定字符串是否代表日期?

jQuery中是否有isDate函数?

如果输入是日期,则应返回true ,否则返回false

根据您尝试实现此操作的方式,您可以使用“validation”jQuery插件并设置date选项 。

如果您不想处理外部库,那么一个简单的仅限JavaScript的解决方案是:

 function isDate(val) { var d = new Date(val); return !isNaN(d.valueOf()); } 

更新:!!主要警告!!
@BarryPicker在评论中提出了一个很好的观点。 对于所有非闰年,JavaScript默默地将2月29日转换为3月1日。 此行为似乎严格限制在31天(例如,3月32日未转换为4月1日,但6月31日转换为7月1日)。 根据您的情况,这可能是您可以接受的限制,但您应该了解它:

 >>> new Date('2/29/2014') Sat Mar 01 2014 00:00:00 GMT-0500 (Eastern Standard Time) >>> new Date('3/32/2014') Invalid Date >>> new Date('2/29/2015') Sun Mar 01 2015 00:00:00 GMT-0500 (Eastern Standard Time) >>> isDate('2/29/2014') true // <-- no it's not true! 2/29/2014 is not a valid date! >>> isDate('6/31/2015') true // <-- not true again! Apparently, the crux of the problem is that it // allows the day count to reach "31" regardless of the month.. 

jQuery核心中没有内置的日期function……并且它并没有直接帮助日期做任何事情,因此它上面没有很多库(除非它们是日期选择器等)。 虽然有几个JavaScript日期库可供使用,但使它们更容易使用。

我无法肯定地回答什么是最好的……这取决于他们如何进入它以及你正在处理的文化,请记住,不同的文化被用来以不同的格式看待他们的日期,作为一个简单的例子, MM/DD/YYYYYYYY/MM/DD (或其他几十个人)。

获取用户日期输入的最佳方法是仅提供有效日期的日期选择器。 它可以用字符串完成,但是你可能会要求用户使用你选择的格式来惹恼用户。

您需要在validation器中指定日期是否在几个月之前。

这使用第二个参数来强制执行订单。 没有第二个参数,它使用计算机的默认顺序。

 // computer default date format order: Date.ddmm= (function(){ return Date.parse('2/6/2009')> Date.parse('6/2/2009'); })() 

允许月份名称和数字:’2000年1月21日’或’1975年10月21日’

 function validay(str, order){ if(order== undefined) order= Date.ddmm? 0: 1; var day, month, D= Date.parse(str); if(D){ str= str.split(/\W+/); // check for a month name first: if(/\D/.test(str[0])) day= str[1]; else if (/\D/.test(str[1])) day= str[0]; else{ day= str[order]; month= order? 0: 1; month= parseInt(str[month], 10) || 13; } try{ D= new Date(D); if(D.getDate()== parseInt(day, 10)){ if(!month || D.getMonth()== month-1) return D; } } catch(er){} } return false; } 

javascript中最简单的方法是:

 function isDate(dateVal) { var d = new Date(dateVal); return d.toString() === 'Invalid Date'? false: true; } 

问题是2月31日进入将返回JavaScript中的有效日期。 输入年,月和日,将其变为日期,并查看该日期是否与您输入的日期相匹配,而不是3月的某一天。

 function isDate(y, m, d) { var a = new Date(y, m-1, d); // subtract 1 from the month since .getMonth() is zero-indexed. if (a.getFullYear() == y && a.getMonth() == m-1 && a.getDate() == d) { return true; } else { return false; } } 

从技术上讲,这是vanilla JavaScript,因为jQuery并没有真正扩展到本机Date对象。

Date.parse将prb排序,而不需要jquery:

http://www.w3schools.com/jsref/jsref_parse.asp

以上删除后,某种灵魂指出基本的parseDate究竟是如何。

JQuery UI Datepicker插件中还有一个“parseDate”方法:

http://docs.jquery.com/UI/Datepicker/parseDate

我到达这个解决方案,因为我使用欧洲格式而且更加复杂,而且javascript显然是美国人!

 function CheckDate() { var D = document.getElementById('FlightDate').value; var values = D.split("-") var newD = values [1] + "/" + values [0] + "/" + values[2] var d = new Date(newD); if(d == 'Invalid Date')document.getElementById('FlightDate').value = ""; } 

凌乱,但做的工作。 如果你的用户是美国人并把这一天放在中间,(我永远不会理解!),那么你可以省去newD的拆分和创建。

我可能通过设置文化或其他方式来覆盖JS中的默认美国主义,但我的目标受众只是欧洲人,因此以这种方式更容易assembly。 (哦,这在Chrome中有效,没有在其他任何地方测试过。)

如果您不想使用jquery插件,我在以下位置找到了该函数:

http://www.codetoad.com/forum/17_10053.asp

适合我。 我找到的其他人工作得不好。

更新:

从页面的缓存版本: http : //web.archive.org/web/20120228171226/http : //www.codetoad.com/forum/17_10053.asp

 // ****************************************************************** // This function accepts a string variable and verifies if it is a // proper date or not. It validates format matching either // mm-dd-yyyy or mm/dd/yyyy. Then it checks to make sure the month // has the proper number of days, based on which month it is. // The function returns true if a valid date, false if not. // ****************************************************************** function isDate(dateStr) { var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; var matchArray = dateStr.match(datePat); // is the format ok? if (matchArray == null) { alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy."); return false; } month = matchArray[1]; // p@rse date into variables day = matchArray[3]; year = matchArray[5]; if (month < 1 || month > 12) { // check month range alert("Month must be between 1 and 12."); return false; } if (day < 1 || day > 31) { alert("Day must be between 1 and 31."); return false; } if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) { alert("Month " + month + " doesn`t have 31 days!") return false; } if (month == 2) { // check for february 29th var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); if (day > 29 || (day == 29 && !isleap)) { alert("February " + year + " doesn`t have " + day + " days!"); return false; } } return true; // date is valid } 

我想你想要这样的东西。 +1,如果它适合你。

HTML

  Date :  (mm/dd/yyyy) 


jQuery的

 $(function() { $('#btnSubmit').bind('click', function(){ var txtVal = $('#txtDate').val(); if(isDate(txtVal)) alert('Valid Date'); else alert('Invalid Date'); }); function isDate(txtDate) { var currVal = txtDate; if(currVal == '') return false; var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex var dtArray = currVal.match(rxDatePattern); // is format OK? if (dtArray == null) return false; //Checks for mm/dd/yyyy format. dtMonth = dtArray[1]; dtDay= dtArray[3]; dtYear = dtArray[5]; if (dtMonth < 1 || dtMonth > 12) return false; else if (dtDay < 1 || dtDay> 31) return false; else if ((dtMonth==4 || dtMonth==6 || dtMonth==9 || dtMonth==11) && dtDay ==31) return false; else if (dtMonth == 2) { var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0)); if (dtDay> 29 || (dtDay ==29 && !isleap)) return false; } return true; } }); 

CSS

 body{ font-family:Tahoma; font-size : 8pt; padding-left:10px; } input[type="text"] { font-family:Tahoma; font-size : 8pt; width:150px; } 

DEMO