# Funciones de fechas

Conjunto de [Funciones de fórmula ](https://doc.velneo.com/27/velneo-vdevelop/proyectos-objetos-y-editores/editores/asistente-de-formulas)que nos permiten operar con datos tipo fecha.

### addDays

Devuelve la fecha incrementada los días.

#### Sintaxis

addDays(fecha, días)

#### Parámetros

**fecha**

Expresión de tipo fecha a la que sumaremos los días. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

**días**

Número de días que sumaremos a la fecha.

Devuelve la fecha incrementada el número de días que hayamos pasado como parámetro, teniendo en cuenta años bisiestos.

#### Ejemplo

FECHA = 01/12/2012\
`addDays(FECHA, 11 )` = 12/12/2012

### addMonths

Devuelve la fecha incrementada los meses.

#### Sintaxis

addMonths(fecha, meses)

#### Parámetros

**fecha**

Expresión de tipo fecha a la que sumaremos los meses. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

**meses**

Número de meses que sumaremos a la fecha.

Devuelve la fecha incrementada el número de meses que hayamos pasado como parámetro.

#### Ejemplo

FECHA=12/09/2012\
`addMonths(FECHA, 3 )` = 12/12/2012

### addYears

Devuelve la fecha incrementada los años.

#### Sintaxis

addYears(fecha, años)

#### Parámetros

**fecha**

Expresión de tipo fecha a la que sumaremos los años. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

**años**

Número de años que sumaremos a la fecha.

Devuelve la fecha incrementada el número de años que hayamos pasado como parámetro.

#### Ejemplo

FECHA = 12/12/2001\
`addYears(FECHA, 11 )` = 12/12/2012

### age

Devuelve la edad del nacido en la fecha pasada como parámetro.

#### Sintaxis

age(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha fecha cuya diferencia con el día en curso queremos conocer. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

Devuelve el número de años entre la fecha del sistema y la fecha que pasamos como parámetro.

### currentDate

Devuelve la fecha actual.

#### Sintaxis

currentDate()

#### Parámetros

No tiene.

#### Ejemplo

`currentDate()` = 04-Dic-2008

### dateIsValid

Indica si la fecha pasada como parámetro es válida.

#### Sintaxis

dateIsValid(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha con la fecha que queremos comprobar. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

La función retornará true (1) si la fecha es correcta y false (0) si no está conformada correctamente.

Tiene en cuenta el número de días del mes y si el año es bisiesto o no. Cualquier fecha antes del 2 de enero de 4713 A.D. se considerará incorrecta.

#### Ejemplos

FECHA = 10/10/2010\
`dateIsValid(FECHA)` = 1

FECHA = 32/33/2010\
`dateIsValid(FECHA)` = 0

### dateToString

Devuelve la fecha como una cadena según las indicaciones del formato. Sigue el [estándar Unicode Common Locale Data Repository](https://en.wikipedia.org/wiki/Common_Locale_Data_Repository).

#### Sintaxis

dateToString(fecha, cadenaFormato)

#### Parámetros

**fecha**

Expresión de tipo fecha a partir de la cual queremos generar una cadena. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

**cadenaFormato**

Cadena de formato que especifica cómo crear la cadena a partir de la fecha.

**Formato**

Día: d (1-31) dd (01-31) ddd (lu.-do.) dddd (lunes-domingo)\
Mes: M (1-12) MM (01-12) MMM (ene.-dic.) MMMM (enero-diciembre)\
Año: yy (00-99) yyyy (0000-9999)

El resto de caracteres en la cadena de formato serán tratados como texto. También los caracteres que estén entre comillas simples (‘) en la cadena de formato serán tratados como texto, lo que nos permite tratar los caracteres específicos de formato (d, dd, M, MM, etc.) como texto.

#### Ejemplos

FECHA = 01/12/2003\
`dateToString(FECHA, "d’MM’MMcaryyyy" )` = 1MM12car2003

FECHA = 30/01/1900\
`dateToString(FECHA, "M.d" )` = 1.30

FECHA = 10/01/2000\
`dateToString(FECHA, "yyyyMMdd" )` = 20000110

FECHA = 10/01/2000\
`dateToString(FECHA,"yyyyMd" )` = 2000110

### day

Devuelve el día de la fecha.

#### Sintaxis

day(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha cuyo día queremos obtener. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

#### Ejemplo

FECHA = 20/07/1969\
`day(FECHA)` = 20

### dayName

Devuelve el nombre del día de la semana que pasemos como parámetro (1 a 7). Si el parámetro abreviatura es true (1), devuelve la forma corta del nombre.

#### Sintaxis

dayName(dia, abreviatura)

#### Parámetros

**dia**

Número del día de la semana (1-7) cuyo nombre queremos conocer en el idioma local del sistema.

**abreviatura**

Si el parámetro es true (1), devuelve la forma corta del nombre, si es false (0) devolverá el nombre completo.

#### Ejemplo

`dayName(1,0)` = “Lunes”

### dayOfWeek

Devuelve el día de la semana (1 al 7) de la fecha.

#### Sintaxis

dayOfWeek(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha que contenga la fecha de la que queremos conocer qué día de la semana es. Comienza a contar desde el lunes, del 1 al 7.

#### Ejemplo

FECHA = 20-11-2008\
`daysOfWeek(FECHA)` = 4

### dayOfYear

Devuelve el día del año (1 al 366) de la fecha.

#### Sintaxis

dayOfYear(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha de la que queremos conocer qué día del año es comenzando a contar desde el 1 de enero, del 1 al 366.

#### Ejemplo

FECHA = 02-Feb-2008\
`dayOfYear(FECHA)` = 41

### daysInMonth

Devuelve los días del mes (28 al 31) de la fecha.

#### Sintaxis

daysInMonth(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha de cuyo mes queremos conocer cuántos días tiene: 28 ó 29, en función del mes y de si el año es bisiesto o no.

#### Ejemplo

FECHA = 10-Feb-2008\
`daysInMonth(FECHA)` = 28

### daysInYear

Devuelve los días del año (365 ó 366) de la fecha.

#### Sintaxis

daysInYear(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha de cuyo año queremos conocer cuántos días tiene: 365 ó 366, en función de si es bisiesto o no.

#### Ejemplo

FECHA = 10-Feb-2008\
`daysInYear(FECHA)` = 365

### daysTo

Devuelve los días entre fechaDesde y fechaHasta.

#### Sintaxis

daysTo(fechaDesde, fechaHasta)

#### Parámetros

**fechaDesde**

Expresión de tipo fecha con la fecha inicial.

**fechaHasta**

Expresión de tipo fecha con la fecha final. El resultado será negativo si fechaHasta es menor que fechaDesde.

#### Ejemplo

FECHA\_INICIO = 10-Oct-2008, FECHA\_FIN= 20-Oct-2008\
`daysTo(FECHA_INICIO, FECHA_FIN )` = 10

### isLeapYear

Devuelve true (1) si el año que pasemos como parámetro es bisiesto y false (0) si no lo es.

#### Sintaxis

isLeapYear(año)

#### Parámetros

**año**

Expresión numérica con el año del que queremos saber si es bisiesto o no.

Devuelve 1 si el año que pasemos como parámetro es bisiesto y 0 si no lo es.

#### Ejemplo

`isLeapYear(2000)` = 0

### month

Devuelve el mes de la fecha.

#### Sintaxis

month(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha cuyo número de mes queremos obtener.

Devolverá el número de mes de la fecha.

#### Ejemplo

FECHA = 01-Dic-2008\
`month(FECHA)` = 12

### monthName

Devuelve el nombre del mes que pasemos com parámetro.

#### Sintaxis

monthName(mes, abreviatura)

#### Parámetros

**mes**

Número del mes cuyo nombre queremos obtener.

**abreviatura**

Si el parámetro es 0, devolverá el nombre completo. Si el parámetro es 1, devolverá la forma corta del nombre.

El nombre será devuelto de acuerdo a la configuración de idioma del sistema en el que se solicita. Cuando escogemos idioma de sistema, en Windows se tomará el formato establecido en la configuración regional del sistema. En el caso de Linux y MacOS, al escoger el idioma del sistema, la configuración regional del sistema la toma del [estándar ICU](http://site.icu-project.org/).

#### Ejemplos

`monthName(9, 0)` = septiembre (Windos, Linux y MacOS)\
`monthName(9, 1)` = sep. (WIndows) sept (Linux y MacOS)

### quarter

Devuelve el trimestre de la fecha.

#### Sintaxis

quarter(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha de la que queremos conocer el trimestre al que pertenece.

#### Ejemplo

`quarter( setDate( 2000, 1, 1 ) )` = 1

### setDate

Crea una fecha.

#### Sintaxis

setDate(año, mes, día)

#### Parámetros

**Año**

Año de la fecha.

**Mes**

Mes de la fecha.

**Día**

Día de la fecha.

Si la fecha especificada no es válida, la función retornará una fecha nula, no devolverá nada. Cualquier fecha antes del 2 de enero de 4713 A.D. se considerará incorrecta.

#### Ejemplo

`setDate(1976, 4, 15)` = 15 de abril de 1976

### stringToDate

Devuelve la fecha de una cadena según las indicaciones del formato.

#### Sintaxis

stringToDate(cadena, cadenaFormato)

#### Parámetros

**cadena**

Cadena que contiene la fecha.

**cadenaFormato**

Permite indicar cuál es el formato de la fecha en la cadena. Las cadenas de formato disponibles son:

**Día**

d (1-31)\
dd (01-31)\
ddd (lu.-do.)\
dddd (lunes-domingo)

**Mes**

M (1-12)\
MM (01-12)\
MMM (ene.-dic.)\
MMMM (enero-diciembre)

Esta función sigue el estándar **Unicode Common Locale Data Repository** y para el idioma español, en el caso del mes abreviado, el formato es el nombre del mes abreviado seguido de un punto. Ejemplo: "ene."

stringToDate("01-jun.-2010", "dd-MMM-yyyy" ).

**Año**

yy (00-99)\
yyyy (0000-9999)

El resto de caracteres en la cadena de formato serán tratados como texto. También los caracteres que estén entre comillas simples (‘) en la cadena de formato serán tratados como texto, lo que nos permite tratar los caracteres específicos de formato (d, dd, M, MM, etc.) como texto.

Si la cadena no se corresponde con el formato especificado la devolverá una fecha nula, no devolverá nada. Esto puede incluir casos en los que se espere ceros por la izquierda u otras incoherencias con el formato esperado.

Las funciones de conversión de fechas tienen por defecto la fecha 1 de enero de 1900 por si no se completan datos. Por lo tanto, los valores que se tomarán por defecto para cualquier dato de la fecha no especificado en el formato son:

Año: 1900\
Mes: 1\
Día: 1

#### Ejemplos

`stringToDate("1MM12car2003", "d’MM’MMcaryyyy" )` = 1 de diciembre de 2003\
`stringToDate("1.30", "M.d" )` = 30 de enero de 1900\
`stringToDate("20000110", "yyyyMMdd" )` = 10 de enero de 2000\
`stringToDate("20000110", "yyyyMd" )` = 10 de enero de 2000\
`stringToDate("02/10/10", "dd/MM/yy")` = 02/10/1910\
`stringToDate("01-Jun.-2010", "dd-MMM-yyyy" )` = 02-Jun.-2010

### weekOfYear

Devuelve la semana del año (1 a 53) de la fecha.

#### Sintaxis

year(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha cuyo número de semana queremos obtener. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

#### Ejemplo

FECHA = 14-Nov-2008\
`weekOfYear(FECHA)` = 46

La norma seguida en Velneo es la [ISO 8601](https://es.wikipedia.org/wiki/ISO_8601).

Según dicha norma, la semana comienza en lunes y el primer jueves de un año pertenece siempre a la primera semana de ese año. Muchos años tienen 52 semanas, pero algunas tienen 53.

Se considera la primera semana de un año (semana W01) aquella que contiene el primer jueves de dicho año, o lo que es lo mismo, aquella que contiene el día 4 de enero.

Por ejemplo, el 1 de enero de 2012 es domingo, por lo tanto, es el último día de la última semana del año 2011.

### year

Devuelve el año de la fecha.

#### Sintaxis

year(fecha)

#### Parámetros

**fecha**

Expresión de tipo fecha cuyo año queremos obtener. Esta fecha puede ser un literal, una variable, un campo, el retorno de una función, etc.

#### Ejemplo

FECHA = 20-Jul-1969\
`year(FECHA)` = 1969
