Cristalab

                 ¿Quieres registrarte?

Bug en Flash con fechas y la clase Date y Number

Por: Dano
11 de Septiembre del 2006
3331 de clabLevel
Otros artículos de Dano
14,384 visitas

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


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


Artículos Relacionados


Etiquetas actionscript

Comentarios | Enviar un comentario
Cambiaron meses por semanas ><
Por: DanielSemper
Sip, es mi teoría, no encuentro otra explicación. Y solo se da cuando al mes le precede un cero. :P
Por: Dano
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
Por: Maikel
cierto Maik ^^ Muy raro, por cierto.
Por: Dano
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.


Código :

var num:Number = 08;

trace(num); 



Salida de Flash Mx 2004 y Flash 8 :

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 1: Syntax error.
var number:Number = 08;

Total ActionScript Errors: 1 Reported Errors: 1

Salida de Flash 9 Alpha :

8


saludos
Por: Maikel
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); // XD
Por: eldervaz
XD 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

Freddie® :


JUAS! :lol: :lol: :lol:
Por: Maikel
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.

Saludos :wink:
Por: Dano
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.

saludos
Por: Maikel
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 y thanks por los aportes ^^
Por: Dano
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
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.