كيف يمكنني العمل مع الأرباع (التواريخ ربع السنوية) في ASP.Net باستخدام VB.Net 2.0؟

StackOverflow https://stackoverflow.com/questions/102521

سؤال

وأنا أعلم ذلك يحتوي Sql Server على بعض الميزات المضمنة المفيدة كل ثلاثة أشهر الأشياء، ولكن ماذا عن .Net الأصلي التاريخ والوقت هدف؟ما هي أفضل طريقة لجمع وطرح واجتياز الأرباع؟

هل هي شيء سيء™ لاستخدام لغة VB الخاصة تاريخ الإضافة () وظيفة؟على سبيل المثال:

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

يحرر:توسيع وظيفة @bslorence:

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

توسيع وظيفة Matt:

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
هل كانت مفيدة؟

المحلول

أعلم أنه يمكنك حساب ربع التاريخ عن طريق:

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

إذا كنت تستخدم Visual Studio 2008، فيمكنك محاولة إضافة وظائف إضافية إلى فئة DateTime من خلال إلقاء نظرة على طرق التمديد.

نصائح أخرى

وماذا عن هذا:

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

شيء واحد يجب أن نتذكره، ليس كل الشركات تنتهي أرباعها في اليوم الأخير من الشهر.

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

التوسع في إجابة مات بلين:

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

لست متأكدًا مما إذا كان هذا سيضيف فوائد السرعة أم لا ولكنه يبدو أكثر نظافة في المنظمة البحرية الدولية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top