AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.11.2006, 18:06   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от NJD Посмотреть сообщение
Есть 2 даты на входе. Нужно выводить разницу между ними в формате столько то лет, столько то месяцев, столько то дней. Никто не поделится? А то самому нет времени писать.
Писать ничего не надо, есть стандартные функции ядра по работе с интервалами дат (см., например, тут, раздел Interval):
X++:
date    d1 = str2date("1996.12.21", 321);
date    d2 = str2date("1994.11.18", 321);
;
info(strfmt("distance is %1 year(s), %2 month(s) and %3 day(s)",
            intvNo(d1, d2, IntvScale::Year), 
            intvNo(d1, d2, IntvScale::Month),
            intvNo(d1, d2, IntvScale::Day)));
Старый 09.11.2006, 19:46   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
X++:
date    d1 = str2date("1996.12.21", 321);
date    d2 = str2date("1994.11.18", 321);
1. В принципе согласен.
2. Но хотел бы чуть-чуть добавить: Вместо str2date(...) можно писать литерал 21\12\1996
__________________
полезное на axForum, github, vk, coub.
Старый 10.11.2006, 08:02   #3  
NJD is offline
NJD
Участник
 
210 / 26 (1) +++
Регистрация: 21.05.2003
Адрес: Moscow
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Писать ничего не надо, есть стандартные функции ядра по работе с интервалами дат (см., например, тут, раздел Interval):
X++:
date    d1 = str2date("1996.12.21", 321);
date    d2 = str2date("1994.11.18", 321);
;
info(strfmt("distance is %1 year(s), %2 month(s) and %3 day(s)",
            intvNo(d1, d2, IntvScale::Year), 
            intvNo(d1, d2, IntvScale::Month),
            intvNo(d1, d2, IntvScale::Day)));
спасибо, но если даты к примеру 2000.10.20 и 2000.09.30 то выдаст 1 месяц и -10 дней.ведь так? - если да, корявенько ...
Старый 10.11.2006, 08:44   #4  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
RHRMDateDiff
Можете еще посмотреть класс RHRMDateDiff:

RHRMDateDiff rhrmDateDiff = new RHRMDateDiff( 21\01\2006, 12\03\2007 ) ;
info( strfmt( "%1, %2, %3", rhrmDateDiff.getYears(), rhrmDateDiff.getMonths(), rhrmDateDiff.getDays() ) ) ;

Результат : 1, 1, 22

Последний раз редактировалось petergunn; 10.11.2006 в 08:51.
Старый 10.11.2006, 09:31   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Cool
Цитата:
Сообщение от petergunn Посмотреть сообщение
Можете еще посмотреть класс RHRMDateDiff
Увы, не всё там гладко в RHRMDateDiff...
Следующий джоб:
X++:
static void KKu_Job_6B10_TestDateDiff(Args _args)
{
    void getDateDiff(date _dateBeg, date _dateEnd)
    {
        RHRMDateDiff dd;
        dd = new RHRMDateDiff(_dateBeg, _dateEnd);
        info(strfmt("distance is %1 year(s), %2 month(s) and %3 day(s)",
                        dd.getYears(), dd.getMonths(), dd.getDays() ));
    }
 
    getDateDiff(31\01\2005, 29\04\2006);
    getDateDiff(31\01\2005, 30\04\2006);
    getDateDiff(31\01\2005, 01\05\2006);
 
    info('---------------------------');
 
    getDateDiff(31\01\2004, 27\02\2004);
    getDateDiff(31\01\2004, 28\02\2004);
    getDateDiff(31\01\2004, 29\02\2004);
    getDateDiff(31\01\2004, 01\03\2004);
}
выдает в инфолог:
Код:
distance is 1 year(s), 2 month(s) and 29 day(s)
distance is 1 year(s), 2 month(s) and 30 day(s)
distance is 1 year(s), 3 month(s) and 1 day(s)
---------------------------
distance is 0 year(s), 0 month(s) and 27 day(s)
distance is 0 year(s), 0 month(s) and 28 day(s)
distance is 0 year(s), 0 month(s) and 29 day(s)
distance is 0 year(s), 1 month(s) and 1 day(s)
Спрашивается в задачке: а где "3 месяца и 0 дней" и "1 месяц и 0 дней" соответственно?
Теги
дата

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сделать AND между двумя датасорсами на одном уровне в query rkorchagin DAX: Программирование 15 15.01.2009 17:42
Разница между запросами Rect DAX: Программирование 13 05.12.2006 12:44
Расчеты между компаниями Yuri Nikitenko DAX: Функционал 9 15.11.2004 08:49
дизайн отчета (как сделать его с разделителями между столбцами?) puz DAX: Программирование 7 02.09.2003 08:50
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:19.