كيف يمكنني العمل مع الأرباع (التواريخ ربع السنوية) في ASP.Net باستخدام VB.Net 2.0؟
سؤال
وأنا أعلم ذلك يحتوي 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)
لست متأكدًا مما إذا كان هذا سيضيف فوائد السرعة أم لا ولكنه يبدو أكثر نظافة في المنظمة البحرية الدولية