Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вхождение одного интервала даты в другой
 
 автор: Ivanko_011   (23.01.2010 в 20:53)   личное сообщение
 
 

Может кто подскажет что-нибудь симпотичнее?

Public PeriodNach_S As Date
Public PeriodNach_Po As Date

Public Function PERID_DATE(Dt1_begin As Date, Dt1_end As Date, Dt2_begin As Date, Dt2_end As Date)

If Dt2_end < Dt1_begin Then Exit Function
If Dt1_end < Dt2_begin Then Exit Function

If Dt2_begin <= Dt1_begin And Dt1_end <= Dt2_end Then 'отчетный месяц полностью попадает в период обязательств
PeriodNach_S = Dt1_begin
PeriodNach_Po = Dt1_end
ElseIf Dt2_begin <= Dt1_begin And Dt2_end <= Dt1_end Then 'с первого числа отчетного месяца до даты окончания обязательств
PeriodNach_S = Dt1_begin
PeriodNach_Po = Dt2_end
ElseIf Dt1_begin <= Dt2_begin And Dt1_end <= Dt2_end Then 'с даты начала обязательств до окончания отчетного месяца
PeriodNach_S = Dt2_begin
PeriodNach_Po = Dt1_end
ElseIf Dt1_begin <= Dt2_begin And Dt2_end <= Dt1_end Then 'даты начала и окончания обязательств попадают в отчетный период
PeriodNach_S = Dt2_begin
PeriodNach_Po = Dt2_end
End If

End Function

  Ответить  
 
 автор: час   (23.01.2010 в 21:03)   личное сообщение
 
 

Lukas подскажет

  Ответить  
 
 автор: Lukas   (23.01.2010 в 22:36)   личное сообщение
 
 

Ну если только чуть иначе написать:

Public Type tPeriod
    Begin As Date
    End As Date
End Type

'A начало первого периода
'B конец первого периода

'C начало второго периода
'D конец второго периода

Public Function GetPeriod(A As Date, B As Date, C As Date, D As Date) As tPeriod
    If D < A Or C > B Then
        Exit Function
    Else
        With GetPeriod
            .Begin = Major(A, C)
            .End = Minor(B, D)
        End With
    End If
End Function

Public Function Minor(B As Date, D As Date) As Date 'Min
    If D < B Then
        Minor = D
    Else
        Minor = B
    End If
End Function

Public Function Major(A As Date, C As Date) As Date 'Max
    If C > A Then
        Major = C
    Else
        Major = A
    End If
End Function

  Ответить  
 
 автор: Ivanko_011   (25.01.2010 в 11:04)   личное сообщение
 
 

Большое спасибо, Lukas. Очень наглядно и компактно

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList