admin管理员组

文章数量:1316023

I get a date which es in this format: ddmmyy, and I need to do some validation with it. How can I parse it to a javascript date object?

I've tried to search, and there are a lot on the ddmmyyyy format, but not the format I get.

EDIT: Example date: 031290 = 3.12.1990.

I get a date which es in this format: ddmmyy, and I need to do some validation with it. How can I parse it to a javascript date object?

I've tried to search, and there are a lot on the ddmmyyyy format, but not the format I get.

EDIT: Example date: 031290 = 3.12.1990.

Share Improve this question edited Sep 17, 2013 at 14:34 ptf asked Sep 17, 2013 at 14:13 ptfptf 3,3808 gold badges39 silver badges68 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 2

You could parse ddmmyyyy into a yyyy-mm-dd form and pass that to Date.parse.

Date.parse( "02032002".replace(/^(\d\d)(\d\d)(\d{4})$/, "$3-$2-$1") );

Or otherwise split it up and use the Date's setters / constructor:

// month - 1 : in this form January is 0, December is 11
var date = new Date( year, month - 1, date ); 

Just noticed the YY vs YYYY part of the question:

var parts = /^(\d\d)(\d\d)(\d{2})$/.exec( "190304" );
var date = new Date( parts[3], parts[2]-1, parts[1] );

You could augment that with some code which adds a 20 or 19 depending if the year is over or below a certain threshold (like 70 : < 70 indicates 20xx and >= 70 indictaes 19xx years).

If you want a non-regex solution, you can use new Date(year, month, date) constructor, and simple cut strings into those parts. It's not fancy, but it clear in what it does:

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)

 }

this function assumes if 2-disgit years is below 20 - then it is meant to be in 2000s, otherwise it's in 1900s. But you can adjust the limit. Try calling it:

alert(parse2date('031290'));

Try this:

var a="221178".split(/(?=(?:..)*$)/);
var result=new Date ( parseInt(a[2],10) + 1900 , a[1]-1 , a[0] ) 

result:

Tue Nov 22 1978 00:00:00 GMT+0200 

JSBIN

Ok, so here is how I solved it.

The answers here is right, except I wasn't happy with the way the detection of the current century worked; so I basically did this:

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

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

With this code, I can maximum validate an age of 100, but that shouldn't be a problem.

Mukul Goel in the ment below points out it can only validate dates in the future. Probably right, I haven't checked it myself.

本文标签: Convert ddmmyy to javascript date objectStack Overflow