Сталкнулся с таким думал все просто посмотрел на форуме супер сложные и умные какието
предложения:
d1=начальная дата
d2=конечная дата
yy=int((d2-d1)/365.2425) && года
mm=int((d2-d1)/30.4369) && месяца
dd=(d2-GOMONTH(d1,mm)) && дни
от куда такие цыфры:
set date to germ
d1=CTOD('1.12.2000')
d2=CTOD('1.12.6000')
((d2-d1)/(YEAR(d2)-YEAR(d1)))=365.2425 && среднее число дней в году за 4000 лет
((d2-d1)/(YEAR(d2)-YEAR(d1)))/12=30.4369 && среднее число дней в месяце за 4000 лет
кому мало точности, берите больше срок будет точнее ;)
Текущая оценка: (3.7)
Дополнения пользователей Расчет срока между двумя датами
Есть хорошее решение этой проблемы - IMHO:
http://www.ita-software.com/files/Age.zip
Владимир Максимов
05.02.05 16:23:04
Вся проблема в том, что каждый по своему понимает, сколько дней и месяцев должно быть между двумя
датами.
Например, сколько дней будет между 27 января и 1 марта? Есть 2 ответа на этот вопрос:
1 месяц и 5 дней - сначала 5 дней до 1 февраля, потом 1 месяц
1 месяц и 2 дня - сначала 1 месяц до 27 февраля, потом 2 дня
И каждый из ответов по своему правильный! Просто способ расчета зависит от конечной цели этого
самого расчета.
Вы в своем расчете фактически приняли вторую идеологию. Тот же самый расчет можно сделать и без
переводных коэффициентов. Будет на пяток строк длиннее и только.
Но! А правильно ли это? Не в смысле расчета, а в смысле конечной цели.
baddan
26.05.05 08:48:49
Позже пришел к следующему: самый точный вариант, работает мгновенно и ни каких наворотов!
d1=CTOD('1.12.1977')
d2=CTOD('12.4.2005')
dd1=0 && дней
mm1=0 && месяцев
yy1=0 && годиков
for mm1=0 to 999 do
if gomo(d1,mm1)>=d2
exit
endif
endfor
dd1=d2-gomo(d1,mm1-iif(mm1>0,1,0))
yy1=int(mm1/12)