vb.net date reporting-services calendar

Buscar el primer y último día del mes calendario anterior en SQL Server Reporting Services(VB.Net)



date reporting-services (9)

Cª#:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-1) new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1)

Estoy creando un informe en MS SQL Server Reporting Services y necesito establecer los parámetros predeterminados de informe de fecha de inicio y fin para que sean la primera y la última fecha del mes calendario anterior y necesito ayuda.

El informe se genera el segundo día calendario del mes y necesito valores para:

Mes anterior del calendario
- primer día
- último día

He estado trabajando con DateAdd, pero no he tenido éxito en la creación de Expression (en VB.NET, como yo lo entiendo). ¡Realmente agradecería cualquier ayuda que me puedan dar!


Estaba buscando una respuesta simple para resolver esto yo mismo. aquí es lo que encontré

Esto dividirá el año y el mes, se tomará un mes y se obtendrá el primer día.

firstDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate) - 1, 1)

Obtiene el primer día del mes anterior de la actual

lastDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate), 0)

Se pueden encontrar más detalles en: http://msdn.microsoft.com/en-us/library/aa227522%28v=vs.60%29.aspx


Estaba teniendo algunas dificultades para traducir VB.NET real al subconjunto Expression que usa SSRS. Sin embargo, definitivamente me inspiraste y esto es lo que se me ocurrió.

StartDate =dateadd("d",0,dateserial(year(dateadd("d",-1,dateserial(year(Today),month(Today),1))),month(dateadd("d",-1,dateserial(year(Today),month(Today),1))),1)) End Date =dateadd("d",0,dateserial(year(Today),month(Today),1))

Sé que es un poco recursivo para el StartDate (primer día del mes pasado). ¿Hay algo que me falta aquí? Estos son estrictamente campos de fecha (es decir, no hay tiempo), pero creo que esto debería capturar el año bisiesto, etc.

¿Como lo hice?


Estas funciones me han sido muy útiles, especialmente al configurar informes de suscripción; sin embargo, noté que al usar la función Último día del mes actual publicado anteriormente, funciona siempre que el mes en curso tenga la misma cantidad de días que el mes actual. He trabajado y probado estas modificaciones y espero que ayuden a otros desarrolladores en el futuro:

Fórmulas de fecha: Encontrar el primer día del mes anterior:

DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1))

Encuentra el último día del mes anterior:

DateSerial(Year(Today()), Month(Today()), 0)

Encontrar el primer día del mes actual:

DateSerial(Year(Today()),Month(Today()),1)

Encuentra el último día del mes actual:

DateSerial(Year(Today()),Month(DateAdd("m", 1, Today())),0)


Este le dará fecha sin tiempo:

=FormatDateTime(DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1)), DateFormat.ShortDate)

Éste le dará fecha y hora:

=dateadd("m",-1,dateserial(year(Today),month(Today),1))


No estoy familiarizado con SSRS, pero puede obtener el comienzo y el final del mes anterior en VB.Net utilizando el constructor DateTime , así:

Dim prevMonth As DateTime = yourDate.AddMonths(-1) Dim prevMonthStart As New DateTime(prevMonth.Year, prevMonth.Month, 1) Dim prevMonthEnd As New DateTime(prevMonth.Year, prevMonth.Month, DateTime.DaysInMonth(prevMonth.Year, prevMonth.Month))

( yourDate puede ser cualquier objeto DateTime , como DateTime.Today o #12/23/2003# yourDate #12/23/2003# )


Randall, aquí están las expresiones de VB que encontré para trabajar en SSRS para obtener el primer y último día de cualquier mes, usando el mes actual como referencia:

Primer día del mes pasado:

=dateadd("m",-1,dateserial(year(Today),month(Today),1))

Primer día de este mes:

=dateadd("m",0,dateserial(year(Today),month(Today),1))

Primer día del próximo mes:

=dateadd("m",1,dateserial(year(Today),month(Today),1))

Último día del mes pasado:

=dateadd("m",0,dateserial(year(Today),month(Today),0))

Último día de este mes:

=dateadd("m",1,dateserial(year(Today),month(Today),0))

Último día del próximo mes:

=dateadd("m",2,dateserial(year(Today),month(Today),0))

La documentación de MSDN para la función VisualBasic DateSerial(year,month,day) explica que la función acepta valores fuera del rango esperado para los parámetros de year , month y day . Esto le permite especificar valores relativos a la fecha útiles. Por ejemplo, un valor de 0 para el Day significa "el último día del mes anterior". Tiene sentido: es el día antes del día 1 del mes actual.


Dim aDate As DateTime = #3/1/2008# ''sample date Dim StartDate As DateTime = aDate.AddMonths(-1).AddDays(-(aDate.Day - 1)) Dim EndDate As DateTime = StartDate.AddDays(DateTime.DaysInMonth(StartDate.Year, StartDate.Month) - 1) ''to access just the date portion '' StartDate.Date '' EndDate.Date


Dim thisMonth As New DateTime(DateTime.Today.Year, DateTime.Today.Month, 1) Dim firstDayLastMonth As DateTime Dim lastDayLastMonth As DateTime firstDayLastMonth = thisMonth.AddMonths(-1) lastDayLastMonth = thisMonth.AddDays(-1)