我得到一个格式为: 的日期ddmmyy
,我需要对其进行一些验证。如何将其解析为 javascript 日期对象?
我试过搜索,ddmmyyyy
格式上有很多,但不是我得到的格式。
编辑:示例日期:031290
= 3.12.1990。
我得到一个格式为: 的日期ddmmyy
,我需要对其进行一些验证。如何将其解析为 javascript 日期对象?
我试过搜索,ddmmyyyy
格式上有很多,但不是我得到的格式。
编辑:示例日期:031290
= 3.12.1990。
您可以将 ddmmyyyy 解析为 yyyy-mm-dd 形式并将其传递给 Date.parse。
Date.parse( "02032002".replace(/^(\d\d)(\d\d)(\d{4})$/, "$3-$2-$1") );
或者以其他方式将其拆分并使用日期的设置器/构造器:
// month - 1 : in this form January is 0, December is 11
var date = new Date( year, month - 1, date );
刚刚注意到问题的 YY 与 YYYY 部分:
var parts = /^(\d\d)(\d\d)(\d{2})$/.exec( "190304" );
var date = new Date( parts[3], parts[2]-1, parts[1] );
您可以通过添加 20 或 19 的代码来增加它,具体取决于年份是否超过或低于某个阈值(例如 70 :< 70 表示 20xx 和 >= 70 表示 19xx 年)。
尝试这个:
var a="221178".split(/(?=(?:..)*$)/);
var result=new Date ( parseInt(a[2],10) + 1900 , a[1]-1 , a[0] )
结果:
Tue Nov 22 1978 00:00:00 GMT+0200
如果您想要一个非正则表达式解决方案,您可以使用new Date(year, month, date)
构造函数,并将简单的字符串切割成这些部分。这并不花哨,但它的作用很清楚:
function parse2date(str){
var year = parseInt(str.substr(4, 2));
var month = parseInt(str.substr(2, 2));
var day = parseInt(str.substr(0, 2))
return new Date(year < 20 ? 2000 + year : year, month - 1, day)
}
这个函数假设如果 2 位数的年份低于 20 - 那么它意味着在 2000 年代,否则它在 1900 年代。但是你可以调整限制。尝试调用它:
alert(parse2date('031290'));
好的,这就是我解决它的方法。
这里的答案是正确的,除了我对当前世纪的检测方式不满意;所以我基本上是这样做的:
var date = new Date(year + 2000, month - 1, day);
if (date > new Date())
date.setYear(year + 1900);
使用此代码,我可以最大程度地验证 100 岁,但这应该不是问题。
Mukul Goel 在下面的评论中指出它只能验证未来的日期。可能是对的,我自己没有检查过。