Autor:
Luis María Guayán
Este artículo describe las funciones nativas de Visual FoxPro y diversas funciones definidas por el usuario para el tratamiento de expresiones de tipo Date y DateTime.
Introducción
Visual FoxPro posee muchas funciones nativas que generan y manipulan expresiones de tipo
Date y
DateTime. En este artículo veremos las características de algunas de estas funciones y una recopilación de funciones definidas por el usuario publicadas en
PortalFox que nos permitirán obtener diversos resultados a partir de este tipo de expresiones.
Funciones DATE() y DATETIME()
La función
DATE() nos retorna la fecha actual del sistema si se ejecuta sin argumentos. Para evitar complicaciones con fechas ambiguas es conveniente que siempre utilicemos la función DATE(nAnio,nMes,nDia) con sus argumentos para crear expresiones de tipo Date.
dFecha = DATE() && Fecha actual del sistema
dFecha = DATE(2000,03,01) && 1 de Marzo de 2000
La diferencia entre dos expresiones de tipo Date nos retorna el número de días transcurridos entre ambas fechas.
? DATE(2004,12,31) - DATE(2004,1,1)
Si se suman o restan cantidades numéricas de días a una expresión de tipo Date, el resultado es otra expresión de tipo Date.
? DATE() + 7 && La fecha actual mas 7 días
? DATE() - 15 && La fecha actual menos 15 días
La función
DATETIME() nos retorna la fecha y hora actual del sistema si se ejecuta sin argumentos. Al igual que la función DATE() y para evitar complicaciones con fechas ambiguas es conveniente que siempre utilicemos la función DATETIME(nAnio,nMes,nDia,nHoras,nMinutos,nSegundo) con
todos sus argumentos para crear expresiones de tipo DateTime.
tFHora = DATETIME()
&& Fecha y hora actual del sistema
tFHora = DATETIME(2000,03,01,16,15,30) && 1 de Marzo de 2000, 16:15:30 horas
La diferencia entre dos expresiones de tipo DateTime nos retorna el número de segundos transcurridos entre ambas fechas y horas.
? DATETIME(2004,12,31,23,59,59) - DATETIME(2004,12,31,6,0,0)
NOTA: Debido a un bug con el redondeo en las
fracciones de segundos en variables del tipo DateTime es conveniente redondear las diferencias de estas variables con ROUND(lnSeg,0)
? ROUND(DATETIME(2004,12,31,23,59,59) - DATETIME(2004,12,31,6,0,0), 0)
Si se suman o restan cantidades de segundos a una expresión de tipo DateTime, el resultado es una expresión de tipo DateTime.
? DATETIME() + 60 && Fecha y hora actual mas 60 segundos
? DATETIME() - 3600 && Fecha y hora actual menos 3600 segundos
Si deseamos generar expresiones Date y DateTime "vacías" lo hacemos de la siguiente manera:
dFecha = {} && Expresion Date
vacia
dFecha = {//} && Expresion Date vacia
tFHora = {/:} && Expresión DateTime vacia
tFHora = {//::} && Expresión DateTime vacia
En estos últimos ejemplos, se debe tener en cuenta que la mayoría de los servidores de bases de datos no trabaja con el concepto de fechas "vacías" como lo hace Visual FoxPro. En estos casos se debe utilizar fechas nulas debido a que se tendrán fechas incoherentes y/o no esperadas.
dFecha = .null.
tFHora = .null.
Funciones con expresiones Date y DateTime
Se pueden convertir expresiones de tipo Date a DateTime y viceversa con las funciones
DTOT() y
TTOD() respectivamente. En el caso de la función DTOT() (al igual que si omitimos los argumentos de horas en la función DATETIME(nAnio,nMes,nDia)) la hora se sustituye por 00:00:00 (12:00:00AM).
dFecha = DATE(2004,06,03)
tFHora = DATETIME(2004,05,18,11,30,45)
? DTOT(dFecha)
? TTOD(tFHora)
Las siguientes funciones de Visual FoxPro sirven para poder extraer algunos valores de las expresiones Date y DateTime, como el año, el mes, el día, la semana, etc.
dFecha = DATE(2004,06,03)
tFHora = DATETIME(2004,05,18,11,30,45)
? YEAR(dFecha) && Año de una expresión Date o DateTime
? MONTH(tFHora) && Mes de una expresión Date o DateTime
? DAY(dFecha) && Día de una expresión Date o DateTime
? HOUR(tFHora) && Horas de una expresión DateTime
? MINUTE(tFHora) && Minutos de una expresión DateTime
? SEC(tFHora) && Segundos de una expresión DateTime
? DOW(dFecha) && Número del día de la semana de una expresión Date o DateTime
? WEEK(dFecha) && Número de semana del año de una expresión Date o DateTime
? QUARTER(tFHora) && Trimestre del año de una expresión Date o DateTime
Todas las funciones anteriores retornan valores numéricos.
Otras funciones de Visual FoxPro retornan cadenas de caracteres a partir de expresiones Date o DateTime, como por ejemplo:
dFecha = DATE(2004,06,03)
tFHora = DATETIME(2004,05,18,11,30,45)
? CMONTH(dFecha) && Nombre del mes de una expresión Date o DateTime
? CDOW(tFHora) && Nombre del día de la semana de una expresión Date o DateTime
? DMY(tFHora) && Cadena con el formato día-mes-año de una expresión Date o DateTime
? MDY(tFHora) && Cadena con el formato mes-día-año de una expresión Date o DateTime
? TTOC(tFHora) && Convierte una expresión DateTime a caracter
? DTOC(dFecha) && Convierte una expresión Date a caracter
Para retornar una cadena de caracteres solo con la hora de una variable DateTime se utiliza la función
TTOC() con el segundo parámetro igual a 2.
? TTOC(DATETIME(),2)
En Visual FoxPro se puede retornar una fecha con "n" meses anteriores o posteriores de una expresión Date o DateTime con la función
GOMONTH().
? GOMONTH(DATE(),3)
&& Tres meses después a partir de la fecha actual
? GOMONTH(DATETIME(),-12) && Doce meses anteriores a partir de la fecha y hora actual
Otras funciones con argumentos de expresiones Date y DateTime