Mis*_*hko 10 javascript string jquery date date-format
给定一个字符串str,我如何检查它是否采用dd/mm/yyyy格式并包含合法日期?
一些例子:
bla bla // false
14/09/2011 // true
09/14/2011 // false
14/9/2011 // false
1/09/2011 // false
14/09/11 // false
14.09.2011 // false
14/00/2011 // false
29/02/2011 // false
14/09/9999 // true
Run Code Online (Sandbox Code Playgroud)
Ada*_*zyk 13
编辑:以下精确解决方案
您可以执行类似的操作,但使用更准确的日期验证算法:
function testDate(str) {
var t = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
if(t === null)
return false;
var d = +t[1], m = +t[2], y = +t[3];
// Below should be a more acurate algorithm
if(m >= 1 && m <= 12 && d >= 1 && d <= 31) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
日期验证ALG:http://www.eee.hiflyers.co.uk/ProgPrac/DateValidation-algorithm.pdf
精确解决方案:返回解析日期或null的函数,完全取决于您的要求.
function parseDate(str) {
var t = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
if(t !== null){
var d = +t[1], m = +t[2], y = +t[3];
var date = new Date(y, m - 1, d);
if(date.getFullYear() === y && date.getMonth() === m - 1) {
return date;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要函数返回true/false和yyyy/mm/dd格式
function IsValidDate(pText) {
var isValid = false ;
var t = pText.match(/^(\d{4})\/(\d{2})\/(\d{2})$/);
if (t !== null) {
var y = +t[1], m = +t[2], d = +t[3];
var date = new Date(y, m - 1, d);
isValid = (date.getFullYear() === y && date.getMonth() === m - 1) ;
}
return isValid ;
}
Run Code Online (Sandbox Code Playgroud)
试试 -
var strDate = '12/03/2011';
var dateParts = strDate.split("/");
var date = new Date(dateParts[2], (dateParts[1] - 1) ,dateParts[0]);
Run Code Online (Sandbox Code Playgroud)
这个问题还有更多信息 - 用JavaScript解析DateTime字符串(我的答案中的代码很大程度上受链接问题的影响)
演示 - http://jsfiddle.net/xW2p8/
编辑
更新的答案,尝试 -
function isValidDate(strDate) {
if (strDate.length != 10) return false;
var dateParts = strDate.split("/");
var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
if (date.getDate() == dateParts[0] && date.getMonth() == (dateParts[1] - 1) && date.getFullYear() == dateParts[2]) {
return true;
}
else return false;
}
Run Code Online (Sandbox Code Playgroud)
此函数传递所有测试用例.据我所知,在我纠正原来的错误答案之前,Adam Jurczyk已经发布了一个准确的答案.他值得称赞.
演示 - http://jsfiddle.net/2r6eX/1/
| 归档时间: |
|
| 查看次数: |
19624 次 |
| 最近记录: |