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 :
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 1: ')' or ',' expected 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 :
de hecho no es Date... el bug es de Number:
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
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.
Haciendo un seguimiento mas detallado del bug. Estuve probando en flash mx 2004, flash 8 y flash 9 alpha, supe que el bug es de Actionscript 2. En Flash Alpha 9 que trabaja con ActionScript 3 no da problemas.
Cuando el cero esta delante Flash lo interpreta como un numero en base octal, hace un tiempo lo habian comentado en este post Por:Adrián
es un fallo de primaria de flash!! Por:Marc Palau_blog
var num:Number = 08; trace(num); //mal
var num1:Number = 09; trace(num1); //mal
var num2:Number = 10; trace(num2); // Por:eldervaz
pero era tan claro un jodido octal y ustedes isque hechandole la culpa al compiler jajajaja ya estaba pensando uy! bug en el flash compiler Por:bird_blog
Ehm, desde que vi lo de Number, octal, y demás sabía que se desvío el tema. El punto es que el bug va en el sentido, de que en la mayoria de los casos, el cero al inicio se usa en las fechas, en los DBS tienes la opción de dar formato en forma corta y larga, (con ceros y sin ceros), en php igual, en delphi, .NET, pero por el sistema octal de flash, que precede de un cero, eso choca, cuando manejas ese formato en Date.
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.
Si Dano de acuerdo, pero este "desvio" es porque el constructor de Date recibe parametros de tipo Number y esa es la raiz del problema con Date, el bug que tiene Number.
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.
pero este "desvio" es porque el constructor de Date recibe parametros de tipo Number y esa es la raiz del problema con Date, el bug que tiene Number.
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 , mi comentario es que instale unos cotizadores de una aseguradora y al cerar el programa me indica que tengo erroe de comiplacion en sheet1 y no que hacer para remediarlo ojala puedan ayudarme, mi correo es arreguinsolorio@yahoo.com.mx
garcias Por:jose luis arreguin -blog