如何在JavaScript中以“YYYYmmdd”格式parsingdate?

这是一个noob问题:

如何parsingdate格式"YYYYmmdd"没有外部库? 如果inputstring不是这种格式,我想获得invalid Date (或未定义,如果它会更容易)。

 function parse(str) { if(!/^(\d){8}$/.test(str)) return "invalid date"; var y = str.substr(0,4), m = str.substr(4,2), d = str.substr(6,2); return new Date(y,m,d); } 

用法:

 parse('20120401'); 

更新:

正如Rocket所说,js中的月份是基于0的…如果你的string中的月份不是0,那么使用这个

 function parse(str) { if(!/^(\d){8}$/.test(str)) return "invalid date"; var y = str.substr(0,4), m = str.substr(4,2) - 1, d = str.substr(6,2); return new Date(y,m,d); } 

更新:

更严格的检查date的有效性。 采取HBP的方式来validationdate。

 function parse(str) { var y = str.substr(0,4), m = str.substr(4,2) - 1, d = str.substr(6,2); var D = new Date(y,m,d); return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : 'invalid date'; } 

validation数字的更健壮的版本:

  function parse (str) { // validate year as 4 digits, month as 01-12, and day as 01-31 if ((str = str.match (/^(\d{4})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$/))) { // make a date str[0] = new Date (+str[1], +str[2] - 1, +str[3]); // check if month stayed the same (ie that day number is valid) if (str[0].getMonth () === +str[2] - 1) return str[0]; } return undefined; } 

看小提琴: http : //jsfiddle.net/jstoolsmith/zJ7dM/

我最近写了一个更强大的版本,你可以在这里find: http : //jsfiddle.net/jstoolsmith/Db3JM/

也许简单的答案,没有检查,但快速…

 var date = parseInt(date); new Date(date / 10000, date % 10000 / 100, date % 100); 

或者,如果来源中的月份不是零,

 new Date(date / 10000, (date % 10000 / 100) - 1, date % 100); 

结合HBP的答案和这个答案得到一个函数,parsingYYYYMMDDHHmm,这里是一个小提琴

 var parseTS=function(str){ // validate year as 4 digits, month as 01-12, and day as 01-31 if ((str = str.match (/^(\d{4})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])([0-5]\d)$/))) { // make a date str[0] = new Date (+str[1], +str[2] - 1, +str[3], +str[4], +str[5]); // check if month stayed the same (ie that day number is valid) if (str[0].getMonth () === +str[2] - 1) { return str[0]; } } return undefined; }; console.log(parseTS('201501012645'));