Anuncios

Bienvenidos sean a este post, en el post anterior vimos como trabajar con el tiempo, es decir fecha y hora, vimos como podemos obtener la fecha y la hora actuales (y ambos tambien), hemos visto como podemos armar una nosotros con una funcion para calcular una futura o una pasada pero hoy nos centraremos mas en ver como obtener una parte de la estructura de una fecha como tambien podemos realizar otras operaciones en ella directamente, comencemos.

Anuncios

Estructura de la fecha

Cuando hablamos de la estructura nos referimos a obtener una parte de la misma, en el post anterior hicimos un ejemplo por medio de split creando un array donde sabiamos que teniamos el dia, el mes y el año pero VBScript nos ofrece cuatro funciones para obtener esto:

  • Day(fecha), nos devuelve el numero del dia de la fecha informada
  • Month(fecha), nos devuelve el mes de la fecha informada
  • Year(fecha), nos devuelve el año de la fecha informada
  • WeekDay(fecha, inicio), nos devuelve la posicion del dia de la fecha informada
  • MonthName(mes, booleano), nos devuelve el nombre del mes de un valor obtenido por month
  • WeekDayName(dia, booleano, inicio), nos devuelve el nombre del dia informado
Anuncios

En el caso de WeekDay no solo pasamos la fecha, sino que tambien podemos especificar cual es el primer dia de la semana, sino se especifica ninguna la opcion predeterminada es Domingo, por ejemplo si en nuestra region o nosotros tomamos como el primer dia el Lunes, se deberia usar de esta manera:

WeekDay("09/12/2019", 2) -> De esta forma devolvera 1

Si nosotros no especificaramos el 2 en lugar de devolver 1 nos devolvera 2, a partir de la version 3 existe una serie de constantes que podemos utilizar para estos casos, veamos la siguiente tabla:

ConstanteValorNombre del dia
vbSunday1Domingo
vbMonday2Lunes
vbTuesday3Martes
vbWednesday4Miercoles
vbThursday5Jueves
vbFriday6Viernes
vbSaturday7Sabado
vbUseSystem0Usa la configuracion del sistema
Anuncios

Para evitar inconvenientes lo mas recomendables es usar la ultima opcion, en el caso de MonthName tenemos un valor booleano adicional que sera utilizado para indicar si debe abreviar o no el nombre, en el caso de WeekDayName, tenemos el mismo booleano y tambien desde que dia comienza la semana (inicio), para el caso de las horas pasa lo mismo, se usan las siguientes funciones:

  • hour(hora), devuelve las horas de una hora informada
  • minute(hora), devuelve los minutos de una hora informada
  • second(hora), devuelve los segundos de una hora informada
Anuncios

Para entender mejor el concepto vamos a efectuar un ejemplo para ello vamos a usar el siguiente codigo:

timestruc.vbs

dim fecha

fecha = date

dia = day(fecha)
mes = month(fecha)
ano = year(fecha)
diaSem = weekday(fecha, vbUseSystem)
nombreMes = monthname(mes)
diaNom = weekdayname(diaSem)

texto = "Day: " & dia & vbCrLf
texto = texto & "Month: " & mes & vbCrLf
texto = texto & "Year: " & ano & vbCrLf
texto = texto & "WeekDay: " & diaSem & vbCrLf
texto = texto & "MonthName: " & nombreMes & vbCrLf
texto = texto & "WeekDayName: " & diaNom & vbCrLf

msgbox texto,,"Todos los tipos de estructuras"
Anuncios

Este es un codigo sencillo donde descomponemos la estructura de la fecha que guardamos en la variable fecha, vean como a cada funcion la asignamos a una variable distinta, donde tendremos una para el dia, otra para el mes, otra para el año, otro para indicar la posicion del dia en la semana, otra para que nos devuelva el nombre del mes, y uno para para devolvernos el nombre del dia, en el siguiente bloque veremos como ingresaremos todos los resultados en una variable llamada texto, en este caso ingresaremos uno por uno con una etiqueta para identificarlo, si lo ejecutamos veremos esto

Vamos a hacer la siguiente modificacion en nuestro codigo agregando la siguiente linea antes del msgbox:

texto = texto & diaNom & ", " & dia & " de " & nombreMes & " del " & ano

Esta nos agregara una nueva linea en texto pero con una estructura de fecha como se ve a continuacion

Con esto hemos visto como obtener las distintas partes de una fecha y como podemos aprovecharlas para otros formatos mas adecuados para nuestros codigos, veamos la siguiente funcion.

Anuncios

DatePart

Todas las funciones anteriores pueden ser reemplazadas por esta ya que nos permite extraer una parte de la fecha informada, para ello usamos la siguiente sintaxis:

DatePart(extraccion, fecha/hora[, primer_dia_semana][, primer_semana_año])
Anuncios

Extraccion es la cadena que le enviaremos que debe extraer, para ello tenemos la siguiente tabla:

CadenaSignificado
yyyyAño
qTrimestre
mMes
yDia del año
dDia
wDia de la semana
wwSemana del año
hHora
nMinutos
sSegundos
Anuncios

Despues ingresaremos la fecha/hora a analizar, los siguientes dos parametros son opcionales, con el primero le diremos cual es el primer dia de la semana igual al post anterior y en el ultimo parametro tendremos los siguientes valores disponibles:

ConstanteValorDescripcion
vbUseSystem0Utiliza el valor de la API de NLS
vbFirstJan11Empieza con la semana que contiene el 1 de enero (predeterminado)
vBFirstFourdays2Empieza con la semana que contenga 4 dias del año nuevo
vbFirstFullWeek3Idem al anterior pero con la semana completa en el año nuevo
Anuncios

Tomemos el ejemplo anterior y modifiquemoslo de la siguiente manera:

dim fecha

fecha = date

dia = datepart("d",fecha)
mes = datepart("m",fecha)
ano = datepart("yyyy",fecha)
diaSem = datepart("w",fecha)
nombreMes = monthname(mes)
diaNom = weekdayname(diaSem)

texto = "Day: " & dia & vbCrLf
texto = texto & "Month: " & mes & vbCrLf
texto = texto & "Year: " & ano & vbCrLf
texto = texto & "WeekDay: " & diaSem & vbCrLf
texto = texto & "MonthName: " & nombreMes & vbCrLf
texto = texto & "WeekDayName: " & diaNom & vbCrLf

texto = texto & diaNom & ", " & dia & " de " & nombreMes & " del " & ano

msgbox texto,,"Todos los tipos de estructuras"
Anuncios

La diferencia esta que ahora con una sola funcion podemos obtener todos los datos necesarios sin necesidad de recordar cada uno de ellos, si lo prueban deberan obtener el mismo resultado que antes, veamos una ultima modificacion para ver las nuevas caracteristicas, para ello agreguemos las siguientes lineas antes del msgbox:

texto = texto & vbCrLf & "Dia del año: " & datepart("y", fecha) & vbCrLf
texto = texto & "Semana del año: " & datepart("ww", fecha) & vbCrLf
texto = texto & "Trimestre: " & datepart("q", fecha)

Con esto obtendremos cual es el dia del año, en que semana del año esta ubicada y en cual trimestre, probemos par ver su resultado

En este caso podemos ver como funciono correctamente, pasemos a la siguiente funcion.

Anuncios

DateAdd

En el post anterior vimos como trabajar con una funcion, DateSerial, que nos permitia generar una fecha pero a su vez aplicar una operacion arimetica para incrementarla o disminuirla, en ese caso usamos uno para incrementar el año, disminuir el mes e incrementar el dia pero hoy veremos una funcion que trabaja de la misma forma pero mas simple ya que es una funcion entre dicha funcion y DatePart, para ello veamos su sintaxis:

DateAdd(intervalo, valor, fecha_original)
Anuncios

En este caso para intervalo usaremos las mismas cadenas que usamos para DatePart, con el mismo significado, valor sera la cantidad que incrementaremos y fecha_original sera la fecha que incrementaremos, vamos a tomar tiempo.vbs del post anterior y vamos a modificarlo de la siguiente manera:

dim dia

dia = dateadd("d",1779,now)

msgbox formatdatetime(dia, vbLongDate)
Anuncios

Sin necesidad de hacer un split y tener que incrementar parte por parte obtendremos el mismo resultado que se vio en el post anterior, si lo probamos porque en este caso toma la fecha y hora actual y la incrementa en 1779 dias, esto es debido a que usamos el intervalo de dias, una particularidad de esta funcion es que nos permite anidar varias funciones y tambien restar dias si en lugar de usar numeros positivos usamos negativos, tomemos el codigo anterior y modifiquemoslo de la siguiente manera:

dim dia

fecha = now
dia = dateadd("h", -5, dateadd("d", -30, dateadd("yyyy", -4, now)))

msgbox "Fecha original: " & fecha & vbCrLf & "Fecha modificada: " & dia
Anuncios

En este caso vamos a guardar en fecha la fecha y hora actual, luego en dia usaremos a varios dateadd anidados, el primero restara 5 horas pero lo restara de la devolucion del segundo dateadd que le restara 30 dias al resultado del tercer dateadd que le restara 4 años al now que informamos, por ultimo mostraremos el valor original y el modificado

Con esto hemos logrado hacer una modificacion muy facil de fechas ya que nos permite incrementar o disminuir una fecha la cantidad que sea necesaria, ya sea horas, minutos, segundos, dias, meses o incluso años, pero en algunas ocasiones necesitaremos calcular la diferencia entre dos fechas y para ello tenemos la siguiente funcion.

Anuncios

DateDiff

Trabaja de forma similar a la anterior pero con algunas sutiles diferencias, veamos primero su sintaxis:

DateDiff(intervalo, fecha1, fecha2[, primer_dia_semana][,primer_semana_año])
Anuncios

En este caso tendremos campos obligatorios, uno es intervalo que al igual que en el caso anterior lo usaremos para definir que campo hara la diferencia, fecha1 y fecha2 que seran las fechas a calcular la diferencia, fecha1 siempre debe ser la mas vieja y fecha2 la mas nueva, primer_dia_semana y primer_semana_año son opcionales y tienen las mismas propiedades que vimos anteriormente, si no se informa ninguna toma las predeterminadas, para este caso vamos a utilizar el siguiente codigo:

edad.vbs

dim nacim
dim texto

nacim = inputbox("ingresa tu cumpleaños:")

texto = "Lleva: " & vbCrLf
texto = texto & datediff("yyyy", nacim, now) & " años" & vbCrLf
texto = texto & datediff("q", nacim, now) & " trimestres" & vbCrLf
texto = texto & datediff("d", nacim, now) & " dias" & vbCrLf
texto = texto & datediff("h", nacim, now) & " horas" & vbCrLf
texto = texto & datediff("n", nacim, now) & " minutos" & vbCrLf
texto = texto & datediff("s", nacim, now) & " segundos" & vbCrLf

msgbox texto,,"Ud. lleva este tiempo sobre la tierra"
Anuncios

En este codigo primero ingresaremos nuestro cumpleaños, una vez ingresado el valor a la variable nacim pasaremos a ingresar en la variable texto los resultados de datediff con respecto a nuestro nacimiento (nacim) y now, en el primer caso agregaremos los años, luego los trimestres, despues los dias, luego las horas, despues los minutos y finalmente los segundos, una vez hecho eso lo mostraremos en pantalla, veamos su salida

Para que nos puede ser util esta funcion? Como nos permite calcular la diferencia entre dos fechas esto crea un valor para poder aplicarlo sobre un filtro en una busqueda o marcar un limite en un tema que veremos mas adelante.

Anuncios

En resumen, hoy hemos visto las estructuras del tiempo, como manipularlas, como separarlas, ya sea por distintas funciones, o por alguna funcion que nos permite trabajar por medio de filtros para obtener el dato, hemos visto como se puede se modificar una fecha de forma mas simple a lo visto en el post anterior y como podemos obtener los distintos resultados de la diferencia entre dos fechas, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes comprar mi libro sobre VBscript en Amazon

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00