Каталог статей
Количество дней в месяце, последний день месяца, високосный год и т.д.
Нет-нет, но на форуме периодически появляются вопросы типа "Как определить количество дней в заданном месяце?", "Как найти последний день месяца?" и т.п. Эти проблемы давно решены, но вопросы возникают снова. И я решил написать короткую статью на эту тему. Использованы решения из книг и с сайтов Андрея Митина и SQL.RU
В.И. Король "Visual Basic 6.0, Visual Basic for Application 6.0" - последний день месяца
Function LastDateOfMonth(dCurdate As Date) As Date
LastDateOfMonth = DateSerial(Year(dCurdate), Month(dCurdate)+1,0)
end function
Программист-Любитель - последний день месяца
Public Function LastDayOfMonth(dtDate As Date)
LastDayOfMonth = DateAdd("d", -1, DateSerial(Year(dtDate), Month(dtDate) + 1, 1))
End Function
Анатолий (Киев) - количество дней в месяце
Function DaysInMonthA(dCurdate As Date) As Integer
DaysInMonthA = DateSerial(Year(dCurdate), Month(dCurdate) + 1, 1) - _
DateSerial(Year(dCurdate), Month(dCurdate), 1)
end function
V.Kim - количество дней в месяце
Function DaysInMonth(dCurdate As Date) As Integer
DaysInMonth = DateDiff("d", DateSerial(Year(dCurdate), Month(dCurdate), 1), _
DateSerial(Year(dCurdate), Month(dCurdate) + 1, 1))
end function
Владимр Саныч - количество дней в месяце (на основе предложения В.И. Короля)
Function DaysInMonthB(dCurdate As Date) As Integer
DaysInMonthB = Day(DateSerial(Year(dCurdate), Month(dCurdate) + 1, 0))
end function
Joss - високосный год
Function fnLongYear(iYear As Integer) As Boolean
If DateSerial(iYear, 3, 1) - DateSerial(iYear, 2, 1) = 29 then
fnLongYear = True
else
fnLongYear = False
End If
end function
АлексейЕ - високосный год
Function LeapYear(intYear As Integer) As Boolean
LeapYear = (intYear Mod 4 = 0 And (Not intYear Mod 100 = 0 Xor intYear Mod 400 = 0))
End Function
Dr.Livsi - определение количества рабочих и выходных дней
Public Function WorkdaysInMonth(ByVal dCurdate As Date, Optional ByVal Workday As Boolean = True) As Integer
'функция определения количества рабочих и выходных дней в заданном месяце
'параметр Workday может принимать 2 значения:
'True - в этом случае подсчитывается количество рабочих дней в заданном месяце (по умолчанию)
'False - в этом случае подсчтиывается количество выходных дней в заданном месяце
Dim MyDate As Date
Dim i, intMyWeekend, intMyWorkday As Integer
For i = 1 To DaysInMonthA(dCurdate)
MyDate = CDate(i & "." & CStr(Month(dCurdate)) & "." & CStr(Year(dCurdate)))
If ((WeekdayName(Weekday(MyDate), True, 1) = "Сб") Or (WeekdayName(Weekday(MyDate), True, 1) = "Вс")) Then
intMyWeekend = intMyWeekend + 1
Else
intMyWorkday = intMyWorkday + 1
End If
Next i
If Workday = True Then
WorkdaysInMonth = intMyWorkday
Else
WorkdaysInMonth = intMyWeekend
End If
End Function
Примечание: не учитываются праздники и переносы.
V.Kim - для коллекции
Enum FirstWeekMethod
UseSystem = vbUseSystem '= 0 ' Use NLS API setting.
FirstJan1 = vbFirstJan1 '= 1 'Start with week in which January 1 occurs (default for Format function).
FirstFourDays = vbFirstFourDays '= 2 'Start with the first week that has at least four days in the year.
FirstFullWeek = vbFirstFullWeek '= 3 'Start with the first full week of the year.
End Enum
Function WeekNumber(Dt As Date, Optional FirstWeekAs As FirstWeekMethod =2) As Long
WeekNumber = Format(Dt, "ww", , FirstWeekAs)
End Function
Function WeekNumber%(vDate, _
Optional nFirstDayAs = vbMonday, _
Optional nFirstWeekAs = vbFirstFourDays)
WeekNumber = DatePart("ww", vDate, nFirstDayAs, nFirstWeekAs)
End Function
| |
| Просмотров: 208 | | |
| Всего комментариев: 0 | |