Comunidad de diseño web y desarrollo en internet online

Problema con fechas en actionscript

Citar            
MensajeEscrito el 28 Dic 2007 12:22 pm
Hola a todos, tengo un problema y les cuento...tengo una consulta donde comparo fechas y horas en php (por medio de mysql) y los datos son enviados por xml a actionscript. El problema es el siguiente: cuando cargo el archivo xml en flash recibo el dato de la fecha adelantada en 1 (una) hora...por ejemplo..28-12-2007 9:30 y recibo en flash 28-12-2007 10:30.
En php esta testeado y se genera bien la variable date.
Alguien sabe que es esto?.
Muchas gracias por su ayuda.
Saludos.

Por estediez

23 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 Dic 2007 01:13 pm
Sera porque la fecha es interpertada por hora universal y no local o viceversa.

De todos modos no indicas como estableces tu
fecha = new Date()
como estableces los subelementos (año4cifras, mes-1 [, dia1-31 [,hora0-23 [, minutos0-59 [, segundos0-59 [, milisegundos0-999]]]]])??

Un saludo

Por Andurino

25 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Dic 2007 01:23 pm
Asi es como defino el formato y la variable para tratar las fechas y horas en php:

$tiempo = time();
$dia = date("Y-m-d H:i:s", $tiempo);

Y luego utilizo esta variable $dia como parametro en la consulta a la base para comparar campos y traer resultados.

$sql = "SELECT rs.id, us.nombre, ve.patente, rs.desde, rs.hasta, rs.motivo FROM reservas AS rs, vehiculos AS ve, usuarios AS us WHERE us.id=rs.idusuario AND ve.id=rs.idvehiculo AND rs.desde<= '$dia' AND rs.hasta>= '$dia'";

Este es el formato de fecha que tiene mysql y por eso es que la use.
Una vez obtenidos los resultados genero los mismos como xml pero cuano los trabajo en flash vienen con ese defasaje.
Gracias por la ayuda.

Por estediez

23 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 Dic 2007 02:47 pm
Bien haber, hay algo que no esta expresado.
<php>
//La funcion Time(), nos devuelve el numero de segundos que pasaron desde el 1/1/1970 hasta este instante
$tiempo= time();
//Parametros Date
Y Año (formato de 4 digitos)
m Nº del mes (de 01 a 12) con dos dígitos
n Nº del mes (de 1 a 12) sin dos dígitos
d Día del mes en formato de 2 dígitos
j Dia del mes sin ceros a la izquierda
H Hora 0-23 con dos dígitos
G Hora 0-23 sin ceros a la izquierda
i Minutos
s Segundos
//SUPONIENDO QUE HOY ES 1/2/2004 5:03:04 establece la varible $dia a la CADENA "2004-02-01 05:03:04"
$dia = date("Y-m-d H:i:s", $tiempo);
??---->>//No hace falta que me expliques la consulta, lo que necesito saber es ahora que haces para pasar $dia al XML ni tampoco completo con uno o dos datos suficiente (mes y hora por ej)
</php>
<flash>
??-------->>// falta saber que lees del xml y como lo pasas a la variable de tipo Date
fecha = new Date();//(año4cifras, mes-1 [, dia1-31 [,hora0-23 [, minutos0-59 [, segundos0-59 [, milisegundos0-999] ] ] ] ])
??--->>//cuando recuperas el dato del xml conviertes el tipo Texto en tipo numerico??
fecha(añoxml??,mesxml??-1[,diaxml??[,horaxml??[,minutosxml??[,segundosxml??]]];

</flash>

Por Andurino

25 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Dic 2007 05:22 pm
Te paso el codigo en php:

$tiempo = time();
$dia = date("Y-m-d H:i:s", $tiempo);
$link = mysql_connect("localhost", "root", "");
mysql_select_db("rev");
$sql = "SELECT rs.id, us.nombre, ve.patente, rs.desde, rs.hasta, rs.motivo FROM reservas AS rs, vehiculos AS ve, usuarios AS us WHERE us.id=rs.idusuario AND ve.id=rs.idvehiculo AND rs.desde<= '$dia' AND rs.hasta>= '$dia'";
$result = mysql_query($sql, $link);
//Si encontramos algo
if ($row = mysql_fetch_array($result)){
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>";
echo "<datos error='no'> \n";
//Mostramos los registros
do {
echo
"<reservas id='" . $row ["id"] . "' nombre='" . $row ["nombre"] . "' patente='" . $row ["patente"] . "' desde='" . $row ["desde"] ."' hasta='" . $row ["hasta"] . "' motivo='" . $row ["motivo"] . "'/>";

} while ($row = mysql_fetch_array($result));

echo "</reservas>";

}
//Si no se ha encontrado nada
else {
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>";
echo "<datos error='si'>\n<error>No se encontraron registros"</error>\n</datos>";
}

Como veras mando solo los datos que genera la consulta y luego en flash lo trato como un xml mas mostrando los resultados en un datagrid, es decir que no hago ningun tratamiento de fechas ni nada.
No se si me explico bien, espero que lo entiendan.
Gracias.

Por estediez

23 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 Dic 2007 09:41 pm
Hechale un ojo ha este ejemplo-experimento de fechas, haber si entiendes como maneja las fechas la clase Date.

fecha = new Date();
//la base de tiempo en flash son milisegundos
un_segundo = 1*1000;
un_minuto = 60* un_segundo;
una_hora =60 * un_minuto;
un_dia = 24* una_hora;
//la base de tiempo en php son segundos por lo que una fechaflash=fechaphp * 1000
diferencia_horaria_UTC_o_GMT= una_hora;
//establecer la fecha al ultimo dia del año - la diferencia horaria
fechaxml = (un_dia*365) - diferencia_horaria_UTC_o_GMT;
fecha_milisegundos = fechaxml;
fecha.setTime (fecha_milisegundos);

trace ("Valor de fecha local -> " +fecha.toString());//Fri Jan 2 02:00:00 GMT+0100 1970
trace ("<- comparar valores de fecha local-universal uno a uno ->")
trace(fecha.getDay()+" <- local -nº dia semana- universal -> "+fecha.getUTCDay());
trace(fecha.getMonth()+" <- local -nº mes- universal ->"+fecha.getUTCMonth());
trace(fecha.getDate()+" <- local -dia del mes- universal ->"+fecha.getUTCDate());
trace (fecha.getHours ()+" <- local -valor de la hora- universal ->"+fecha.getUTCHours ());
trace (fecha.getMinutes() +" <- local -valor de los minutos- universal ->"+fecha.getUTCMinutes());
trace (fecha.getSeconds() +" <- local -valor de los segundos- universal ->"+fecha.getUTCSeconds());
trace (fecha.getMilliseconds()+" <- local -valor de los milisegundos- universal ->"+fecha.getUTCMilliseconds());
trace (fecha.getFullYear()+" <- local -valor del año- universal ->"+fecha.getUTCFullYear());
//trace ("Valor de hora universal -> "+fecha.getUTCHours().toString())
trace("Diferencia en minutos entre la hora local y la universal-> "+fecha.getTimezoneOffset());

/*
La clase Date controla el horario de verano de forma distinta en función del sistema operativo y la versión de Flash Player. Flash Player 6 y las versiones posteriores manejan el horario de verano en los sistemas operativos siguientes como se indica a continuación:

Windows: el objeto Date se ajusta automáticamente según el horario de verano. El objeto Date detecta si se emplea el horario de verano en el entorno regional actual y, si es así, detecta la fecha y la hora en que se pasa del horario estándar al horario de verano. Sin embargo, las fechas de transición que están en vigor en ese momento se aplican a fechas pasadas o futuras, de modo que puede que la diferencia horaria del horario de verano no se calcule correctamente en el caso de fechas pasadas si el entorno regional tiene fechas de transición diferentes.
Mac OS X: el objeto Date se ajusta de forma automática para el horario de verano. La base de datos de información de zonas horarias de Mac OS X sirve para determinar si a las fechas y horas pasadas o futuras se les debe aplicar una diferencia horaria debida al horario de verano.
Flash Player 5 maneja el horario de verano en estos sistemas operativos del modo siguiente:

Windows: la normativa de EE. UU. para el horario de verano siempre se aplica, lo que lleva a transiciones incorrectas en Europa y otras zonas que también tienen un horario de verano, pero cuyo momento de transición es distinto al de EE. UU. Flash detecta correctamente si el horario de verano se utiliza en el entorno regional actual.

*/
stop();

-------------------------------resumiendo-------------------
el error de hora +1 que te ocurre es por un motivo que estas indicando que interprete la fecha +-GMT , de lo que deduzo que estas usando fecha.getHours cuando deverias usar fecha.getUTCHours, pero como has podido comprobar debes usar las llamadas date.getUTCxxx puesto que dependiendo del valor de la fecha los resultados de las funciones se interpretan diferente dependiendo del S.O y reproductor flash.

Por Andurino

25 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.