3

我得到一个格式为: 的日期ddmmyy,我需要对其进行一些验证。如何将其解析为 javascript 日期对象?

我试过搜索,ddmmyyyy格式上有很多,但不是我得到的格式。

编辑:示例日期:031290= 3.12.1990。

4

4 回答 4

2

您可以将 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 年)。

于 2013-09-17T14:21:04.530 回答
1

尝试这个:

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 

JSBIN

于 2013-09-17T14:19:32.697 回答
1

如果您想要一个非正则表达式解决方案,您可以使用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'));
于 2013-09-17T14:37:20.050 回答
1

好的,这就是我解决它的方法。

这里的答案是正确的,除了我对当前世纪的检测方式不满意;所以我基本上是这样做的:

var date = new Date(year + 2000, month - 1, day);

if (date > new Date())
    date.setYear(year + 1900);

使用此代码,我可以最大程度地验证 100 岁,但这应该不是问题。

Mukul Goel 在下面的评论中指出它只能验证未来的日期。可能是对的,我自己没有检查过。

于 2013-09-18T10:38:33.980 回答