year now example vb.net datetime .net-2.0 date

now - ¿Cómo trabajo con trimestres(fechas trimestrales) en ASP.Net usando VB.Net 2.0?



datetime year c# (5)

Qué tal esto:

Dim nextQuarter As DateTime = DateTime.Now.AddMonths(3);

Sé que Sql Server tiene algunos elementos trimestrales incorporados útiles , pero ¿qué pasa con el objeto DateTime nativo .Net? ¿Cuál es la mejor manera de agregar, restar y atravesar cuartos?

¿Es malo ™ utilizar la función DateAdd () específica de VB? p.ej:

Dim nextQuarter As DateTime = DateAdd(DateInterval.Quarter, 1, DateTime.Now)

Editar: Función de expansión de @ bslorence:

Public Shared Function AddQuarters(ByVal originalDate As DateTime, ByVal quarters As Integer) As Datetime Return originalDate.AddMonths(quarters * 3) End Function

Expandiendo la función de @ Matt:

Public Shared Function GetQuarter(ByVal fromDate As DateTime) As Integer Return ((fromDate.Month - 1) / 3) + 1 End Function

Editar: aquí hay un par de funciones más que fueron útiles:

Public Shared Function GetFirstDayOfQuarter(ByVal originalDate As DateTime) As DateTime Return AddQuarters(New DateTime(originalDate.Year, 1, 1), GetQuarter(originalDate) - 1) End Function Public Shared Function GetLastDayOfQuarter(ByVal originalDate As DateTime) As DateTime Return AddQuarters(New DateTime(originalDate.Year, 1, 1), GetQuarter(originalDate)).AddDays(-1) End Function


Sé que puedes calcular el trimestre de una fecha de la siguiente manera:

Dim quarter As Integer = (someDate.Month - 1) / 3 + 1

Si está usando Visual Studio 2008, puede probar el empernado de funcionalidad adicional en la clase DateTime echando un vistazo a los métodos de extensión .


Una cosa para recordar, no todas las compañías terminan sus cuartos el último día de un mes.


Public Function GetLastQuarterStart() As Date GetLastQuarterStart = DateAdd(DateInterval.Quarter, -1, DateTime.Now).ToString("MM/01/yyyy") End Function Public Function GetLastQuarterEnd() As Date Dim LastQuarterStart As Date = DateAdd(DateInterval.Quarter, -1, DateTime.Now).ToString("MM/01/yyyy") Dim MM As String = LastQuarterStart.Month Dim DD As Integer = 0 Dim YYYY As String = LastQuarterStart.Year Select Case MM Case "01", "03", "05", "07", "08", "10", "12" DD = 31 Case "02" Select Case YYYY Case "2012", "2016", "2020", "2024", "2028", "2032" DD = 29 Case Else DD = 28 End Select Case Else DD = 30 End Select Dim LastQuarterEnd As Date = DateAdd(DateInterval.Month, 2, LastQuarterStart) MM = LastQuarterEnd.Month YYYY = LastQuarterEnd.Year Return String.Format("{0}/{1}/{2}", MM, DD, YYYY) End Function


Ampliando la respuesta de Matt Blaine:

Dim intQuarter As Integer = Math.Ceiling(MyDate.Month / 3)

No estoy seguro si esto agregaría beneficios de velocidad o no, pero parece más limpio IMO