Juas qué gracioso:
Verás, como nos encontramos en 2007 (año no bisiesto), al hacer
objFecha = new Date();
Estás creando ya la fecha con el día y la hora del momento de ejecución de la página (momento ahora).
Después haces
objFecha.setDate( dia );
objFecha.setMonth( mes - 1 );
Con lo cual el día es fijado a 29 y el mes a febrero, pero 29 de Febrero no existe en 2007, luego su día equivalente es 1 de marzo de 2007.
Y después cambias el año:
objFecha.setFullYear( ano );
Entonces queda cambiada la fecha a 1 de marzo de 2004.
Solución: Pongamos el año antes del mes. O eso o hacer una cosa más simple:
Código PHP:
//Date(año,mes,dia,hora,minutos,segundos)
objFecha = new Date(ano,mes-1,dia, 0,0,0);
Y entonces funcionará de cualquier manera.
Y el problema de que la función te devuelva "Lunes, 29 de Febrero del 2004", y el método toString() "Mon Mar 01 2004" no es contradictorio porque para generar la primera cadena estas utilizando las variables dia mes y ano, y no las variables de objFecha:
Código PHP:
return aDias[ objFecha.getDay() ] + ", " + objFecha.getDate() + " de " + aMeses[ objFecha.getMonth() ] + " del " + objFecha.getFullYear();
De esta manera coincidirán el
return y el toString(), sea la fecha esperada o no.
Con tu función:
Código PHP:
var aDias = new Array( "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado" );
var aMeses = new Array( "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" );
function getCadenaFecha( cadena ) {
var dia = parseInt(cadena.substr(0,2), 10);
var mes = parseInt(cadena.substr(3,2), 10);
var ano = parseInt(cadena.substr(6,4), 10);
var objFecha = new Date(ano,mes-1,dia, 0,0,0);
var enString= objFecha.toString();
var enTxt= aDias[ objFecha.getDay() ] + ", " + dia + " de " + aMeses[ mes - 1 ] + " del " + ano;
return [enString,enTxt];
}
alert( getCadenaFecha("42/02/2004").join("\r") );
El día 42 de febrero se corrige en el toString (13 de marzo), pero no en el texto que devuelves tú, dándote una mezcla: sábado (bien) 42 (mal) de Febrero (mal) de 2004 (bien, pero por casualidad).
Solucionalo, pues, así:
Código PHP:
var aDias = new Array( "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado" );
var aMeses = new Array( "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" );
function getCadenaFecha( cadena ) {
var dia = parseInt(cadena.substr(0,2), 10);
var mes = parseInt(cadena.substr(3,2), 10);
var ano = parseInt(cadena.substr(6,4), 10);
var objFecha = new Date(ano,mes-1,dia, 0,0,0);
var enString= objFecha.toString();
var enTxt= aDias[ objFecha.getDay() ] + ", " + objFecha.getDate() + " de " + aMeses[ objFecha.getMonth() ] + " del " + objFecha.getFullYear();;
return [enString,enTxt];
}
alert( getCadenaFecha("42/02/2004").join("\r") );
Un saludo!!