这是一个菜鸟问题:
如何在"YYYYmmdd"
没有外部库的情况下解析格式化日期?如果输入字符串不是这种格式,我想得到invalid Date
(或者如果它更容易,则不定义).
Par*_*kar 30
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);
}
Run Code Online (Sandbox Code Playgroud)
用法:
parse('20120401');
Run Code Online (Sandbox Code Playgroud)
更新:
正如Rocket所说,月份在js中基于0 ...如果你的字符串中的月份不是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);
}
Run Code Online (Sandbox Code Playgroud)
更新:
更严格地检查日期的有效性.采用HBP验证日期的方式.
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';
}
Run Code Online (Sandbox Code Playgroud)
一个更健壮的版本验证数字:
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;
}
Run Code Online (Sandbox Code Playgroud)
请参阅:http://jsfiddle.net/jstoolsmith/zJ7dM/
我最近在这里写了一个功能更强大的版本:http://jsfiddle.net/jstoolsmith/Db3JM/