![]() |
#7 |
Участник
|
Ок. Я неправильно выразился.
Получать число месяцев из функции, которая тратит время и на расчет числа дней... Это тоже изврат. Хотя и не такой, как расчет через цикл. Что касается расчета месяцев... Там предлагается: X++: ms = ( year(dtEnd) * 12 + mthOfYr(dtEnd) )
- ( year(dtBeg) * 12 + mthOfYr(dtBeg) ); // предварительная разница в месяцах ![]() Другое дело, что там учитываются полные месяцы. Т.е. тот алгоритм выдаст 0 полных месяцев для дат 21.01.09, 18.08.09 (день месяца даты начала больше дня месяца даты окончания), а мой алгоритм выдаст 1 месяц. Но если надо учитывать полные месяцы, то опять же лучше избегать вычисления разницы между датами. сделать так: X++: { Date dateFrom = 01\06\1995; Date dateTo = 01\04\2008; int years = year(dateTo) - year(dateFrom); int month = mthofyr(DateTo) - mthofYr(dateFrom); int month_correction = dayofmth(DateFrom) > dayofmth(DateTo) ? sign(DateFrom - DateTo) : 0; return ((years * 12) + month + month_correction; } |
|
Теги |
дата |
|
|