Вопрос
Есть две даты. Каждой дате соответствует определенное время. Информация «дата»-«время» заносится в разные столбцы. Как определить интервал времени между двумя датами?
Ответ
Если из большей даты вычесть меньшую, то мы получим количество дней между этими датами.
Дальше если у конечной даты время больше времени начальной даты, то полученную сумму дней умножаем на 24 часа — получим количество прошедших суток в часах + разница между конечным и начальным временем. Если начальное время больше конечного (т.е. прошли неполные сутки), то количество дней минус 1 умножаем на 24 + (24 — (начальное время — конечное время)). В итоге получаем количество часов и минут, прошедшее между двумя датами.
Из конференции Expert_FAQ
Для определения интервала между датами во встроенном языке есть функция
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
Синтаксис функции DateDiff содержит следующие именованные аргументы:
interval Обязательный. Строковое выражение, указывающее тип временного интервала, который следует использовать при вычислении разности между датами date1 и date2. date1, date2 Обязательные. Значения типа Variant (Date). Две даты, разность между которыми следует вычислить.
firstdayofweek Необязательный. Константа, указывающая первый день недели. Если этот аргумент опущен, считается, что неделя начинается с воскресенья.
firstweekofyear Необязательный. Константа, указывающая первую неделю года. Если этот аргумент опущен, первой неделей считается неделя, содержащая 1 января.
Однако, она имеет, мягко говоря, особенность (на самом деле это очередной «ляп» Microsoft), а именно:
Это из Help:
«При сравнении дат 31 декабря и 1 января следующего года функция DateDiff для интервала типа год («yyyy») возвращает значение 1, хотя разница между датами составляет всего один день.»
Поэтому, (например, для определения полных лет между двумя датами) я использую собственную маленькую функцию:
//---------------------------------
Public Function ПолныхЛет (ПерваяДата As Date, ВтораяДата As Date) As Integer
Dim ПМ, ВМ, ПД, ВД, Годы As Integer
If (ВтораяДата = Null) Then
ВтораяДата = Now
End If
Годы = DateDiff(«yyyy», ПерваяДата, ВтораяДата)
ПМ = Month(ПерваяДата)
ВМ = Month(ВтораяДата)
If ВМ < ПМ Then
ПолныхЛет = Годы — 1
ElseIf ВМ > ПМ Then
ПолныхЛет = Годы
ElseIf ВМ = ПМ Then
ПД = Day(ПерваяДата)
ВД = Day(ВтораяДата)
If ВД <= ПД Then
ПолныхЛет = Годы — 1
Else
ПолныхЛет = Годы
End If
End If
End Function
Сергей Нелюбов
Copyright 2000-2004 Сообщество Чайников
Контактная информация