Programando una aplicación de rutina y reutilizando una clase que use en otro proyecto, me tope con un warning en Flash. Me sorprendio porque era un módulo sencillo, además, antes le había hecho pruebas unitarias (con esto se supone no hay bugs).
Pues bien la cosa va así:
Para construir una instancia de la clase Date, le podemos pasar como parametro lo siguiente:
Código :
new Date([año, mes, día]);
Ok, entendido un poco como se crea la instancia de Date, vayamos al bug:
Vamos a crear fechas de junio a agosto del 2006:
Código :
new Date(2006,05,8); new Date(2006,06,8); new Date(2006,07,8);
¡Todo bien, verdad!
Ahora, vamos a crear de la misma forma fechas de septiembre a octubre:
Código :
new Date(2006,08,2); new Date(2006,09,2);
Respetando exactamente la misma forma de instanciar la clase Date, envía el siguiente error.
Flash :
new Date(2006,08,2); //NO es valido con cero
Total ActionScript Errors: 1 Reported Errors: 1
Después de realizar pruebas, deduzco que el problema es el cero al inicio del mes. PERO sólo falla en los meses 08(septiembre) y 09(octubre). Aqui la prueba:
Código :
new Date(2006,8,2); new Date(2006,9,2);
A modo de tabla voy a compara el mes 7 y 8 para que se vea mas claro:
Código :
new Date(2006,7,2); //Valido sin cero new Date(2006,07,2); //Valido con cero new Date(2006,8,2);//Valido sin cero new Date(2006,08,2); //NO es valido con cero
Obviamente no tengo acceso al compilador de Flash, pero por lógica deduzco que el warning es enviado por una validación erronea, que en determinado momento y cuando el mes es precedido por un cero, valida que el mes, sea un dia de la semana, eso explica por que solo llega hasta el 7.
Repito es un bug, muy refuscado, pero finalmente bug.
Saludos
Update - 18 de Septiembre del 2106 Cosmic Era
Maikel apunta que el error ocurre tambien con la clase Number de Flash.
Maikel :
Código :
var num:Number = 08 ; // genera error de compilacion
Código :
var num:Number = 07 ; // valido
saludos
Update #2 - Casí 3 pero no completamente 2 días despues del anterior update
El Pink Haired Funny-Voice Programmer Maikel demostró que el bug no existe en Actionscript 3. So be happy!
Update #3 Sweet Crystal Memories
Por Freddie®:
Pues resulta que Adrian se acordó que yo expliqué que si se le pone un cero antes del numero es un jodido octal.
Por ende, 07 no da error porque en los octales los numeros van del 0 al 7 y por tanto si existe. En cambio, 08 está mal porque el caracter "8" no existe en el sistema octal.
A la final no es un bug, es una feature
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por DanielSemper el 11 de Septiembre de 2006
Por Dano el 11 de Septiembre de 2006
Por Maikel el 11 de Septiembre de 2006
Código :
Código :
saludos
Por Dano el 11 de Septiembre de 2006
Por Maikel el 11 de Septiembre de 2006
Código :
Salida de Flash Mx 2004 y Flash 8 :
var number:Number = 08;
Total ActionScript Errors: 1 Reported Errors: 1
Salida de Flash 9 Alpha :
saludos
Por Adrián el 11 de Septiembre de 2006
Por Marc Palau el 11 de Septiembre de 2006
Por eldervaz el 11 de Septiembre de 2006
trace(num); //mal
var num1:Number = 09;
trace(num1); //mal
var num2:Number = 10;
trace(num2); //
Por bird el 11 de Septiembre de 2006
Por Maikel el 11 de Septiembre de 2006
Freddie® :
JUAS!
Por Dano el 11 de Septiembre de 2006
Vamos nunca haremos una suma de este tipo(y si la intentamos no lo hará por que transformará a octal):
05+06 = 11; //No le veo sentido a anteponer un cero
PERO,
new Date(2006,08,10); //Al declarar una fecha, y agregarle un cero al inicio, se me hace de lo mas normal
Como sea, no se me hace algo tan grave, mas sin embargo hay que tenerlo en cuenta.
Saludos
Por Maikel el 11 de Septiembre de 2006
Ahora esto de manejar la clase Date con numeros me parece un poco descuidado por parte de Macromedia, pues lo normal es que que se traten como cadenas las propiedades de una clase Date, tal como lo hace MySQL, php y otros, que no lo manejan como numero propiamente dicho a pesar de que estas(propiedades) se basan en su mayoria en numeros.
saludos
Por Dano el 11 de Septiembre de 2006
Ese es el punto, que yo notaba "rara" la forma en como interpretaba los valores, ese es el origen del bug, que no los tomaba como debería, mi hipotesis era que lo tomaba como dia de la semana, por tu comentario del bug en Number, al parecer lo toma como Number. El punto es que no te deja crear fechas como comunmente lo harías en otros lenguages.
saludos y thanks por los aportes
Por jose luis arreguin el 21 de Agosto de 2008
garcias
Por merlin1989 el 02 de Enero de 2010
Por Dongee el 24 de Junio de 2010