Как рассчитать, что прошло шесть месяцев с указанной даты в VB6? - PullRequest
2 голосов
/ 30 января 2010

Это не домашнее задание:).

Я хотел бы закодировать функцию, которая возвращает True, если с заданной даты прошло 6 месяцев (поэтому я в первый день седьмого месяца).

Функция PassedSixMonthsSince (Dim dGivenDate как Дата, Dim dCurrentDate как Дата) как Булево

Вот некоторые тесты, которые должна пройти эта функция:

Debug.Assert PassedSixMonthsSince ("2000-01-01", "2000-07-01") = True

Debug.Assert PassedSixMonthsSince ("2000-01-31", "2000-07-31") = True

Debug.Assert PassedSixMonthsSince ("2000-08-31", "2001-02-28") = False

Debug.Assert PassedSixMonthsSince ("2007-08-31", "2008-02-29") = False

Debug.Assert PassedSixMonthsSince ("2000-05-31", "2000-11-30") = False

Я пытался использовать DateAdd ("m", 6, dGivenDate), но это не так просто.

спасибо Michele

Ответы [ 4 ]

1 голос
/ 30 января 2010

DataAdd - правильный путь. Вы можете добавить шесть месяцев к указанной дате:

PassedSixMonthsSince = DateAdd("m", 6, dGivenDate) >= dCurrentDate

или вы можете вычесть шесть месяцев из текущей даты:

PassedSixMonthsSince = dGivenDate >= DateAdd("m", -6, dCurrentDate)

Если вы не получите правильный результат, то это потому, что написанные вами даты не могут быть проанализированы правильно. Используемый вами формат (AFAIK) ваш, он больше не используется. Стандартизированный формат (ISO 8601) - "2000-02-29", и есть другие распространенные форматы, такие как "2/29/2000" и "29/2/2000". Если вы хотите использовать литералы даты вместо разбора строк, они разделяются хеш-символами: #2000-02-29#.

1 голос
/ 30 января 2010

У меня больше не установлен VB6, но я попробовал этот код VBScript:

<script language="vbscript">

Function PassedSixMonthsSince(dGivenDate, dCurrentDate)

     '' // should be just greater, not greater or equals
    PassedSixMonthsSince = _
        CDate(dCurrentDate) >= DateAdd("m", 6, CDate(dGivenDate))
    MsgBox _
        "Is " & CDate(dCurrentDate) & _
        " greater or equal than " & DateAdd("m", 6, CDate(dGivenDate)) & _
        " ? = " & PassedSixMonthsSince

End Function

PassedSixMonthsSince "2000-01-01", "2000-07-01"  ''// exactly 6 months
PassedSixMonthsSince "2000-01-31", "2000-07-31"  ''// exactly 6 months
PassedSixMonthsSince "2000-08-31", "2001-02-28"  ''// One day less 6 months
PassedSixMonthsSince "2000-05-31", "2001-11-30"  ''// One day less 6 months

</script>

Я заменил ваш разделитель даты, чтобы использовать тире и исправить "2001-02-29" неправильную дату. Но ваши утверждения неверны.

0 голосов
/ 03 февраля 2010

Я решил с этим кодом:

Function PassedSixMonthsSince(ByVal dGivenDate as Date,ByVal dCurrentDate as Date)
     dGivenDateWithSixMonthsAdded=DateAdd("m", 6, dGivenDate)
     if Day(dGivenDate)<>Day(dGivenDateWithSixMonthsAdded) then
             dGivenDateWithSixMonthsAdded=DateAdd("d", 1,dGivenDateWithSixMonthsAdded)
     end if
     PassedSixMonthsSince = (dCurrentDate >= dGivenDateWithSixMonthsAdded)
End Function
0 голосов
/ 30 января 2010

похоже, что DateDiff () доступен в VB6 ...

IF DateDiff("m", FirstDate, SecondDate) >= 6 THEN
return ture
ELSE
return false
END IF

что-то в этом роде возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...