Как мне работать с кварталами (квартальными датами) в ASP.Net с использованием VB.Net 2.0? - PullRequest
4 голосов
/ 19 сентября 2008

Я знаю, что Sql Server имеет некоторые удобные встроенные ежеквартальные данные , но как насчет нативного DateTime объекта. Как лучше всего сложить, вычесть и пересечь четверти?

Является ли плохой вещью ™ использование VB-специфической функции DateAdd () ? e.g.:

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

Edit: Расширение функции @ bslorence:

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

Расширение функции @ Мэтта:

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

Редактировать: вот еще пара полезных функций:

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

Ответы [ 5 ]

9 голосов
/ 19 сентября 2008

Я знаю, что вы можете рассчитать квартал даты следующим образом:

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

Если вы используете Visual Studio 2008, вы можете попробовать добавить дополнительные функции в класс DateTime, взглянув на Методы расширения .

4 голосов
/ 19 сентября 2008

Как насчет этого:

Dim nextQuarter As DateTime = DateTime.Now.AddMonths(3);
1 голос
/ 05 февраля 2014

Расширяя ответ Мэтта Блейна:

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

Не уверен, добавит ли это преимущество в скорости или нет, но выглядит более чистым IMO

1 голос
/ 04 января 2013
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
1 голос
/ 19 сентября 2008

Следует помнить одну вещь: не все компании заканчивают свои кварталы в последний день месяца.

...