Formato de fecha genérica o canonica
¿Tuviste alguna vez problemas con las fechas? ¿Problemas por la configuracion del formato de la fecha (ingles o español) de la base de datos?
Si es asi, te invito a leer esta pequeña explicación y te propongo que uses la siguiente forma para tratar las fechas. Espero te sirva. Es simplemente
una sugerencia de alguien que tubo que lidiar con esos problemas (Yo mismo).
Bueno, vamos a plantear un caso puntual. Tal vez sea el mas experimentado, asi que a la mayoria de uds. recordarán el problema.
Cada motor de bases de datos, tiene una forma de almacenar la fecha. Access, SQL Server, MySQL, etc...
Aqui hablaremos de Access. Igualemente no me voy a detener a explicar como se almacena la fecha, pero si voy a hablar sobre la configuracion de la fecha.
Access configura sus fechas según la configuración regional de la máquina donde está instalado. Entonces nosotros trabajamos
felizmente en nuestro servidor local, y cuando subimos nuestra base de datos a otro servidor (uno que esta configurado para ingles)
las fechas deben adaptarse a el nuevo formato de fecha que hay en el servidor.
Hasta aqui no habría problema mayor, ya que todas las fechas estarian invertidas. Ejemplo: La fecha 4/5/2002
que localmente indica 4 de Mayo de 2002, al subir la base de datos la fecha sería 5/4/2002... pero esta fecha también
es 4 de Mayo de 2002
Empecemos con el problema. Supongamos que al Access en el servidor local, le indicamos que agregue esta fecha: 4/20/2002.
Esa fecha en español no existe, pero el "fantastico" Access "piensa" que nos hemos equivocado, y acepta esa fecha y la invierte a 20/4/2002.
Este maneje que hizo Access aqui con nuestra fecha, no tiene que ver con el idioma. Simplemente como dije antes "piensa" que nos equivocamos y supuestamente
nos resulve el problema automaticamente. Y de aqui vienen todos nuestros problemas con las fechas, ya que si al Access local (en español) le pasamos
20/4/2002 es igual que pasarle 4/20/2002.
Esto mismo pasa en el Access que está en ingles, sólo que al revez claro...
Cual es el problema de todo esto. Simple. Si trabajamos con fechas en español, funcionara simpre bien abajo, pero NO SIEMPRE bien
arriba... pero a veces si! Depende justamente de la fecha. Entonces se hace como imposible hacer un sistema que trabaje correctamente
tanto en español como en ingles.
La posible solucion: Usar el formato canónico de fecha expresado como YYYY/MM/DD lo que quiere decir
expresar la fecha como Año/Mes/Dia. Entonces la fecha 6 de Enero de 2002 se escribe como: 2002/01/06
Access, reconoce correctamente ese formato, asumiendo SIEMPRE que lo primero es el año, lo segundo el mes y lo tercero el dia. Y luego,
lo transforma a su formato, pero nos quedamos trankilos que es correcta la fecha!
Atencion! Que pase si pasamos esta fecha: 2002/20/8 ? .... tira error!! y eso por mas malo que paresca
es lo mejor que nos puede pasar. Eso SI sería un error nuestro, y es por eso que está bien recibir error de parte del Access
Bueno... entonces concordamos que lo mejor es usar la fecha canonica. A continuación les paso una función a la cual se le pasa como
argumento una fecha, y devuelve la fecha en formato canónico. Pero tengan cuidado con la fecha que le pasan!!! Porque puede que le pasen
mal el formato de fecha, y la función devolverá una respuesta que no es la que buscamos.
Si con la función se hacen lios, no la usen, y pasen siempre las fechas en fomatto YYYY/MM/DD
<%
Function FechaGenerica(fecha)
If IsDate(fecha) = True Then
DIM dteDay, dteMonth, dteYear
dia = Day(fecha)
mes = Month(fecha)
ano = Year(fecha)
FechaGenerica = ano & "/" & Right(Cstr(mes + 100),2) & "/" & Right(Cstr(dia + 100),2)
Else
FechaGenerica = Null
End If
End Function
%>
|
Una última cosa. En sentencias SQL que actualizan bases Access, las fechas se pasan entre # #.
Por ejemplo: INSERT INTO tabla(fecha) VALUE(#"& var_fecha &"#)
|