Кол-во дней в месяце

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Кол-во дней в месяце

Сообщение Чудик » 05.06.2005 (Вс) 13:30

Как узнать? Есть ли какая-то функция?
Век живи - век учись!
www.detal-plast.narod.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 05.06.2005 (Вс) 13:55

Код: Выделить всё
Public Function DaysInMonth(byval MonthNo as int, optional byval YearNo as int = 0) as int
dim D as Date
' Use  current year if nothing is specified
if YearNo = 0 then YearNo = Year()
' Construct date next to month specified
D = CDate(cstr(YearNo) & "-" & cstr((MonthNo mod 12) + 1) & "-01")
' Substract 1 day and take a day value
DaysInMonth = Day(dateadd(dd, -1, D))
end function

Только протести ее - писал навскидку...

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 05.06.2005 (Вс) 14:17

Подбправил в строке
Код: Выделить всё
DaysInMonth = Day(DateAdd("d", -1, Ds))

В остальном все прекрасно. Работает. Спасибо.
Век живи - век учись!
www.detal-plast.narod.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 05.06.2005 (Вс) 21:46

А-а, да, вижу. Сорри, все никак с T-SQL не переключусь :).

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.06.2005 (Пн) 9:21

Чудик писал(а):Подбправил в строке
Код: Выделить всё
DaysInMonth = Day(DateAdd("d", -1, Ds))

В остальном все прекрасно. Работает. Спасибо.


Вообще-то это равнозначно:

Код: Выделить всё
DaysInMonth = Day(Ds-1)
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.06.2005 (Пн) 9:28

А вообще я бы написал данную функцию так:

Код: Выделить всё
Public Function DaysInMonth(ByVal MonthNo As Integer, Optional ByVal YearNo As Integer = 0) As Integer
    ' Use  current year if nothing is specified
    If YearNo = 0 Then YearNo = Year(Date)
    ' Construct date next to month specified
    DaysInMonth = Day(DateAdd("m", 1, DateSerial(YearNo, MonthNo, 1) - 1))
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 06.06.2005 (Пн) 11:53

А если определять кол-во дней в месяце выбранном, например, при помощи MonthView или DTPicker'ом, то можно так:
Код: Выделить всё

Public Function DaysInMonth(dTemp As Date) As Integer
    'Подсчитывает количество дней в месяце
    DaysInMonth = DateSerial(Year(dTemp), Month(dTemp) + 1, Day(dTemp)) - DateSerial(Year(dTemp), Month(dTemp), Day(dTemp))

End Function

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 06.06.2005 (Пн) 14:31

Спасибо, спасибо, Всем спасибо! :P
Век живи - век учись!
www.detal-plast.narod.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.06.2005 (Пн) 14:34

А почему никто не использует тривиально простые способы?

Код: Выделить всё
Public Function DaysInMonth(ByVal MonthNo As Integer, Optional ByVal YearNo As Integer = 0) As Integer
    ' Use  current year if nothing is specified
    If YearNo = 0 Then YearNo = Year(Date)

    DaysInMonth = Choose(MonthNo, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

    If (MonthNo = 2) And (YearNo Mod 4 = 0) And ((YearNo Mod 100 <> 0) Or (YearNo Mod 400 = 0)) Then DaysInMonth = DaysInMonth + 1
End Function


Здесь зато всё прозрачно - негде ошибиться.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.06.2005 (Пн) 14:36

Неправильно :)
Во-первых, есть разные календари, в каких-то 400 лет не учитываются. А во-вторых (только я точно не помню), вроде бы тысячелетия тоже являются исключениями.
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.06.2005 (Пн) 14:41

А микрософта еще 26 год тоже исключение :lol:

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 06.06.2005 (Пн) 14:42

Alibek прав. Да и в логике следующей строки очень легко ошибиться (например со скобками):

Код: Выделить всё

If (MonthNo = 2) And (YearNo Mod 4 = 0) And ((YearNo Mod 100 <> 0) Or (YearNo Mod 400 = 0)) Then DaysInMonth = DaysInMonth + 1


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 112

    TopList