Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/04/2007, 20:54
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 4 meses
Puntos: 45
Re: Trabado tontamente con Date()

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,dia0,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 aDiasobjFecha.getDay() ] + ", " objFecha.getDate() + " de " aMesesobjFecha.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 
getCadenaFechacadena ) {
    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,dia0,0,0);
    var 
enStringobjFecha.toString();
    var 
enTxtaDiasobjFecha.getDay() ] + ", " dia " de " aMesesmes ] + " del " ano;
    return [
enString,enTxt];
}

alertgetCadenaFecha("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 
getCadenaFechacadena ) {
    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,dia0,0,0);
    var 
enStringobjFecha.toString();
    var 
enTxtaDiasobjFecha.getDay() ] + ", " objFecha.getDate() + " de " aMesesobjFecha.getMonth() ] + " del " objFecha.getFullYear();;
    return [
enString,enTxt];
}

alertgetCadenaFecha("42/02/2004").join("\r") ); 


Un saludo!!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.