El constructor de fecha acepta cualquier valor. Si el [[valor] primitivo] del argumento es número, entonces la Fecha que se crea tiene ese valor. Si [[valor]] primitivo es Cadena, entonces la especificación solo garantiza que el constructor Fecha y el método de análisis sean capaces de analizar el resultado de Date.prototype.toString y Date.prototype.toUTCString()
Una manera confiable establecer una fecha es construir una y usar los métodos setFullYear
y setTime
.
Un ejemplo de ello aparece aquí: http://jibbering.com/faq/#parseDate
ECMA-262 R3 no define ningún formatos de fecha. Al pasar valores de cadena al constructor Fecha o Date.parse tiene un resultado dependiente de la implementación. Lo mejor es evitarlo.
Editar: La entrada de Preguntas comp.lang.javascript es: Un ISO 8601 extendido formato de fecha local
YYYY-MM-DD
se puede analizar como un
Date
con lo siguiente: -
/**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;
}
usted tiene algunos errores de copiar y pegar en su ejemplo de código, mira a la instrucción for: 'for (var d = 0; d ';' que levantará un 'SyntaxError' ... – CMS