Тут высчитываю число лет и месяцев.
- Код: Выделить всё
...
y = DateDiff("yyyy", dateMin, dateMax, vbMonday)
m = (DateDiff("m", dateMin, dateMax, vbMonday) - 1) - Y * 12
...
А вот как быть с днями? Может есть у кого мысли. Поделитесь
...
y = DateDiff("yyyy", dateMin, dateMax, vbMonday)
m = (DateDiff("m", dateMin, dateMax, vbMonday) - 1) - Y * 12
...
Public Sub dmdiff(dateBeg As Date, dateEnd As Date)
Dim dateTest As Date
Dim y1 As Integer, m1 As Integer, y2 As Integer, m2 As Integer
Dim ys As Integer, ms As Integer, ds As Integer
y1 = Year(dateBeg): m1 = Month(dateBeg)
y2 = Year(dateEnd): m2 = Month(dateEnd)
ms = (y2 * 12 + m2) - (y1 * 12 + m1) 'предварительная разница в месяцах
dateTest = DateAdd("m", ms, dateBeg) 'пробная дата на ms месяцев от начала
ds = DateDiff("d", dateTest, dateEnd) 'предварит-ная разница в днях
'в пределах последнего месяца (+/-)
If ds < 0 Then 'ЕСЛИ предварит-но "перебрали" с целыми месяцами от начала
ms = ms - 1 'ТО окончат-ная разница в месяцах
dateTest = DateAdd("m", ms, dateBeg) 'новая "пробная" дата
ds = DateDiff("d", dateTest, dateEnd) 'окончательная разница в днях (+)
End If
ys = ms \ 12: ms = ms Mod 12 'годы - тривиально от месяцев
Debug.Print ys, ms, ds '<- Годы, Месяцы, Дни разницы соответственно
'или еще и недели внутри месяца :-)
'Debug.Print ys, ms, ds \ 7, ds Mod 7 '<- Годы, Месяцы, Недели, Дни разницы
End Sub
Сейчас этот форум просматривают: Yandex-бот и гости: 106