СообЧа > База Знаний > Программы > MS Excel

Вопрос

Есть две даты. Каждой дате соответствует определенное время. Информация «дата»-«время» заносится в разные столбцы. Как определить интервал времени между двумя датами?

Ответ

Если из большей даты вычесть меньшую, то мы получим количество дней между этими датами.

Дальше если у конечной даты время больше времени начальной даты, то полученную сумму дней умножаем на 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 Сообщество Чайников
Контактная информация