Le constructeur Date accepte n'importe quelle valeur. Si la primitive [[valeur]] de l'argument est un nombre, alors la Date qui est créée a cette valeur. Si la primitive [[valeur]] est String, la spécification garantit uniquement que le constructeur Date et la méthode parse sont capables d'analyser le résultat de Date.prototype.toString et Date.prototype.toUTCString().
Une manière fiable de définir une date est d'en construire une et d'utiliser la fonction setFullYear
y setTime
méthodes.
Un exemple de cela apparaît ici : http://jibbering.com/faq/#parseDate
L'ECMA-262 r3 ne définit aucun format de date. Le passage de valeurs de chaîne au constructeur de date ou à Date.parse a des résultats qui dépendent de l'implémentation. Il est préférable de l'éviter.
Edit : L'entrée de comp.lang.javascript FAQ est : Un format de date local ISO 8601 étendu YYYY-MM-DD
peut être analysé en un Date
avec ce qui suit : -
/**Parses string formatted as YYYY-MM-DD to a Date object.
* If the supplied string does not match the format, an
* invalid Date (value NaN) is returned.
* @param {string} dateStringInRange format YYYY-MM-DD, with year in
* range of 0000-9999, inclusive.
* @return {Date} Date object representing the string.
*/
function parseISO8601(dateStringInRange) {
var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
date = new Date(NaN), month,
parts = isoExp.exec(dateStringInRange);
if(parts) {
month = +parts[2];
date.setFullYear(parts[1], month - 1, parts[3]);
if(month != date.getMonth() + 1) {
date.setTime(NaN);
}
}
return date;
}
2 votes
Vous avez des erreurs de copier-coller dans votre exemple de code, regardez l'instruction for :
for(var d=0;d';
qui soulèvera unSyntaxError
...0 votes
Cela répond-il à votre question ? Pourquoi Date.parse donne-t-il des résultats incorrects ?