Леонид, писал(а):
Alexbootch, результаты познаются в сравнении!Блин, не учел вот это:
MSDN писал(а):
Как вы уже наверняка знаете, для вычисления интервала между двумя датами можно использовать встроенную в VB функцию DateDiff. Но работать с этой функцией нужно очень внимательно, с учетом входящих в нее ограничений.
Отгадайте такую загадку. Заданы две даты в виде переменных DateStart и DateFinish. Чтобы определить временной интервал между ними, мы написали такую процедуру:
Листинг 1.
Print "Интервал в годах = "; DateDiff("yyyy", DateStart, DateFinish)
Print "Интервал в месяцах = "; DateDiff("m", DateStart, DateFinish)
Print "Интервал в днях = "; DateDiff("d", DateStart, DateFinish)
Print "Интервал в часах = "; DateDiff("h", DateStart, DateFinish)
Print "Интервал в минутах = "; DateDiff("n", DateStart, DateFinish)
Print "Интервал в секундах= "; DateDiff("s", DateStart, DateFinish)
И получили такой парадоксальный результат:
Листинг 2.
Интервал в годах = 1
Интервал в месяцах = 1
Интервал в днях = 1
Интервал в часах = 1
Интервал в минутах = 1
Интервал в секундах = 1
Почему так произошло и о каких датах шла речь? Дело в том, что функция DateDiff определяет временной интервал элементарно — в соответствии с заданным первым параметром просто отбрасывает значения даты «после этой точки». То есть если вы задали «день», то отбрасываются часы (0 часов), если месяц — дни (первое число месяца). В соответствии с этим алгоритмом получается, что между 31 мая 2000-го и 1 июня 2000-го в единицах «месяц» разница — один месяц (что в определенном смысле совершенно верно).
В нашем же примере исходные значения даты были равны
Листинг 3.
DateS = "31.12.2000 23:59:59"
DateF = "01.01.2001"
Проверил пример Леонида на базе SQLite:
SELECT strftime('%d.%m.%Y %H:%M:%S', '2008-03-07 00:52:10', '-62 year','-11 month','-26 day','-19 hours','-52 Minute','-10 second'); --> 11.03.1945 05:00:00