C'est une question de noob:
Comment analyser une date au format "YYYYmmdd"
sans bibliothèques externes? Si la chaîne d'entrée n'est pas dans ce format, j'aimerais obtenir invalid Date
(ou undefined si ce sera plus facile).
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);
}
Usage:
parse('20120401');
METTRE À JOUR:
Comme Rocket l'a dit, les mois sont basés sur 0 dans js ... utilisez ceci si les mois ne sont pas basés sur 0 dans votre chaîne
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);
}
METTRE À JOUR:
Vérification plus rigoureuse de la validité de la date. Façon adoptée par le RAP pour valider la date.
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';
}
Une version plus robuste validant les chiffres:
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;
}
Voir le violon à l’adresse: http://jsfiddle.net/jstoolsmith/zJ7dM/
J'ai récemment écrit une version beaucoup plus performante que vous pouvez trouver ici: http://jsfiddle.net/jstoolsmith/Db3JM/
réponse simpliste peut-être, sans contrôles, mais rapide ...
var date = parseInt(date);
new Date(date / 10000, date % 10000 / 100, date % 100);
ou, si les mois ne sont pas nuls dans la source,
new Date(date / 10000, (date % 10000 / 100) - 1, date % 100);
combinant la réponse de HBP et cette answer pour obtenir une fonction qui analyse YYYYMMDDHHmm et voici un violon
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'));