24.01.2011, 10:13 | #1 |
Участник
|
Работа с датами
Доброго времени суток.
Как можно получить разницу между датами в месяцах, существует ли встроенная функция для этих целей? Последний раз редактировалось AngelDominantes; 24.01.2011 в 10:19. |
|
24.01.2011, 10:24 | #2 |
Axapta
|
Что вы подразумеваете под словами "разницу между датами в месяцах"? Сколько месяцев будет 20 февраля-15 января? (20/28)+(31-15)/31=1.23 месяца?
|
|
|
За это сообщение автора поблагодарили: Gustav (1), AngelDominantes (1). |
24.01.2011, 10:29 | #3 |
Moderator
|
|
|
|
За это сообщение автора поблагодарили: AngelDominantes (1). |
24.01.2011, 10:31 | #4 |
Участник
|
Цитата:
Можно конечно использовать такой алгоритм. Если date1>date2 X++: i = year(_date); j = year(_date2); s = (i - j)*12; i = mthOfyr(_date); j = mthOfyr(_date2); result = (i-j)+s; Последний раз редактировалось AngelDominantes; 24.01.2011 в 10:41. |
|
24.01.2011, 10:35 | #5 |
Участник
|
|
|
24.01.2011, 10:44 | #6 |
Участник
|
В Аксапта 3 нашел метод MntInterval_Ru() класса Global:
X++: static void TestData(Args _args) { TransDate startDate = str2date("01.07.2010", 123); TransDate endDate = str2date("21.01.2011", 123); ; info(int2str(MntInterval_Ru(startDate, endDate))); } X++: static int MntInterval_Ru(Date BeginDate, Date endDate) { int Result=0; Date _Date=BeginDate; ; //Количество полных месяцев между датами Do { _Date=nextmth(_Date); Result++; } while (_Date<=endDate); return Result-1; }
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 24.01.2011 в 10:46. |
|
|
За это сообщение автора поблагодарили: AngelDominantes (1). |
24.01.2011, 11:23 | #7 |
Участник
|
В принципе, по приведенной ссылке уже все есть. В смысле, упоминание про IntvNo(). Только добавлю, что в данном случае в качестве 3 параметра следует использовать значение IntvScale::YearMonth, а не IntvScale::Month. Поскольку следует учитывать возможность перехода через год.
X++: static void test(Args _args) { FromDate fromDate = 31\12\2010; ToDate toDate = 01\01\2011; ; print abs(intvNo(fromDate, toDate, IntvScale::YearMonth)); pause; } |
|