这是一个菜鸟问题:
如何在"YYYYmmdd"没有外部库的情况下以格式解析日期?如果输入字符串不是这种格式,我想得到invalid Date(或者 undefined 如果它更容易的话)。
这是一个菜鸟问题:
如何在"YYYYmmdd"没有外部库的情况下以格式解析日期?如果输入字符串不是这种格式,我想得到invalid Date(或者 undefined 如果它更容易的话)。
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 的……如果月份在您的字符串中不是基于 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);
}
更新:
更严格地检查日期的有效性。采用 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';
}
验证数字的更强大的版本:
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/
我最近写了一个功能更强大的版本,你可以在这里找到: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 的答案和这个答案来获得一个解析 YYYYMMDDHHmm 的函数,这里是一个小提琴
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'));
仅使用字符串中的数字的示例:
function toDate(str) {
var m = str.split(/\D/);
return new Date(+m[0], +m[1] - 1, +m[2], +m[3], +m[4], +m[5]);
}
console.log(toDate("2020-08-23 23:34:45"));