Cómo calcular el último día del mes en Visual Basic
En la programación, a menudo es necesario calcular el último día del mes para propósitos como sistemas de contabilidad y aplicaciones de registro de tiempo de los empleados. He notado que los programadores utilizan diferentes trucos para hacer esto, a menudo utilizando funciones semi-hardcodeadas que calculan el último día del mes de la siguiente manera: primero, la función verifica el mes de la fecha proporcionada. Si el mes es enero, marzo, mayo, julio, agosto, octubre o diciembre, la función devuelve 31. Si el mes es abril, junio, septiembre o noviembre, la función devuelve 30. Si el mes es febrero, la función devuelve 28. El código se ve algo así:
![Cómo calcular el último día del mes en Visual Basic - Video](https://i.ytimg.com/vi/3S86l_dAflM/hqdefault.jpg)
Private Function SetDates (pDate As Date) As String Select Case Month (pDate) Case 1, 3, 5, 7, 8, 10, 12 SetDates = "31" Case 4, 6, 9, 11 SetDates = "30" Case 2 If (Year(pDate) Mod 4) = 0 Then SetDates = "29" Else SetDates = "28" End If End Select End Function
En este artículo, te mostraré una solución mucho más simple y elegante para determinar el último día de un mes.
Código de ejemplo
Primero, crearemos un proyecto en VB para descubrir el primer y último día de cualquier mes dado mediante los siguientes pasos:
- Inicia VB y crea un nuevo proyecto.
- Agrega tres etiquetas: un control de selección de fecha y hora (dtDate) y dos cajas de texto (txtMonthStart y txtMonthEnd). Establece la propiedad Enabled de las cajas de texto en False. Tu pantalla debería verse como en la Figura A.
- Agrega el siguiente código al evento dtDate_Change():
Call SetDates
- Agrega el siguiente código al evento Form_Load():
dtDate.Value = Date 'obtener la fecha de hoy Call SetDates
- Agrega la función Private Sub SetDates() con el siguiente código:
Dim sDayFirst As String, sDayLast As String, sMonth As String, sYear As String sDayLast = GetLastDayOfMonth(dtDate.Value) sDayFirst = "01" sYear = Year(dtDate.Value) sMonth = Month(dtDate.Value) txtMonthEnd.Text = sMonth & "/" & sDayLast & "/" & sYear txtMonthStart.Text = sMonth & "/" & sDayFirst & "/" & sYear
- Agrega la función Private Function GetLastDayOfMonth(pDate As Date) con el siguiente código:
GetLastDayOfMonth = Day(DateSerial(Year(pDate), Month(pDate) + 1, 0))
- Pulsa [Ctrl][F5] para ejecutar el proyecto y verás una pantalla como la de la Figura B.
Ahora, cambia la fecha en la parte superior del formulario a un mes y/o año diferente, y verás que los valores en las dos cajas de texto se han actualizado para mostrar el primer y último día del mes de la fecha que especificaste. Veamos cómo funciona el código en detalle.
![](https://newsmatic.com.ar/wp-content/uploads/usando-el-comando-reemplazar-para-ahorrar-tiempo-imagen-1-150x103.webp)
Funcionamiento interno
Calcular el último día de un mes es una tarea bastante sencilla. En el evento Form_Load, establecemos el valor del control dtDate en la fecha de hoy. Después de eso, llamamos al procedimiento SetDates, donde llamamos a una función para obtener el último día del mes (GetLastDayOfMonth).
Pasamos el valor de dtDate a GetLastDayOfMonth. Después de que GetLastDayOfMonth devuelve el último día de un mes en particular, establecemos las propiedades de texto de txtMonthEnd y txtMonthStart en una fecha completa creando una cadena con el valor del mes seleccionado en dtDate, el valor del día devuelto por GetLastDayOfMonth para txtMonthEnd, "01" para txtMonthStart y el valor del año seleccionado en dtDate. Usamos "01" porque cualquier mes comenzará en el primero.
En el evento change del control dtDate, también llamamos al procedimiento SetDates para actualizar las propiedades de texto de las cajas de texto.
Ahora veamos qué sucede en la función GetLastDayOfMonth. Para obtener el último día del mes, utilizamos la función integrada de VB DateSerial, que devuelve un valor de fecha para un año, mes y día especificados. La función espera tres argumentos (un año, un mes y un día). Luego, utilizamos la función integrada Day para determinar el valor real del último día del mes.
Se pasa un valor de dtDate a la función. En GetLastDayOfMonth, determinamos el año y el mes de la fecha pasada (pDate). Luego, pasamos los siguientes argumentos a la función DateSerial: el año, el mes (le sumamos 1 al valor del mes) y 0. Si hoy es 19/08/02, el valor devuelto por la declaración DateSerial(Year(pDate), Month(pDate) + 1, 0) sería 31/08/02. Utilizamos la función Day para obtener el día de la fecha resultante, que en nuestro caso devolvería 31.
Observa, sin embargo, que usamos Month(pDate) + 1, lo que nos da el valor del mes 9, no 8, y también especificamos el valor del día como 0. Ese es el truco. La función DateSerial interpretará esto y devolverá el último día del mes 8, no 9, que es exactamente lo que queremos obtener.
![](https://newsmatic.com.ar/wp-content/uploads/por-que-utilizar-un-iterador-en-java-en-lugar-de-una-lista-o-un-array-150x150.png)
En este ejemplo, hemos demostrado una forma simple de obtener el último día de un mes con solo unas pocas líneas de código. La versión completa del código de ejemplo está disponible en el Listado A.
En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo calcular el último día del mes en Visual Basic , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados