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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.02.2007, 09:23   #1  
moid is offline
moid
Участник
 
84 / 10 (1) +
Регистрация: 05.02.2007
Номер недели
Какой ф-ей можно получить номер недели текущего месяца?
Старый 20.02.2007, 09:30   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от moid Посмотреть сообщение
...номер недели текущего месяца?
Зависит от того, что Вы вкладываете в это понятие:
- можно конкретное число месяца поделить на 7 и округлить в нужную сторону
- а можно вычислить неделю года от конкретного числа месяца и потом из нее вычесть неделю года от первого числа этого месяца

Вы уверены, что Вам нужен именно месяц, а не год?
Старый 20.02.2007, 09:33   #3  
moid is offline
moid
Участник
 
84 / 10 (1) +
Регистрация: 05.02.2007
В месяце есть 4 недели мне нужно узнать какая по счету текущая неделя.
Старый 20.02.2007, 09:34   #4  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Когда то писал что то подобное сейчас уже не помню, а посмотри для начала формочку SysDateLookup там прорисовываются на grid недели по определенному году
Старый 20.02.2007, 09:37   #5  
moid is offline
moid
Участник
 
84 / 10 (1) +
Регистрация: 05.02.2007
wkofyr - вот эта если кому пригодится
Старый 20.02.2007, 09:42   #6  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от moid Посмотреть сообщение
Какой ф-ей можно получить номер недели текущего месяца?
так спрашивал же номер недели, а эта функция для определения номера недели с начала года...
Старый 20.02.2007, 09:43   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от moid Посмотреть сообщение
wkofyr - вот эта если кому пригодится
Ну, ёлка-палка... Она же возвращает номер недели в году! Т.е. от 1 до 52 (53).

Странно, вроде мы по-русски изъяснялись...
Старый 20.02.2007, 09:56   #8  
moid is offline
moid
Участник
 
84 / 10 (1) +
Регистрация: 05.02.2007
Ну...
Вот по русски если чё :

WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ;
И получиться, то что надо...
Старый 20.02.2007, 10:08   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от moid Посмотреть сообщение
WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ;
И получиться, то что надо...
И чо? Сёдня типа 2-я неделя месяца? Круто! Йо!
X++:
static void Job11(Args _args)
{
    ;
    info( int2str( (wkofyr(20\02\2007) - mthofyr(20\02\2007)*4) + 1 ) );
}
Результат: 2.
Результат: 1.
Старый 20.02.2007, 10:12   #10  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
В Аксапте используются ISO Week numbers:

Under the ISO standard, a week always begins on a Monday, and ends on a Sunday. The first week of a year is that week which contains the first Thursday of the year, or, equivalently, contains Jan-4.

While this provides some standardization, it can lead to unexpected results -- namely that the first few days of a year may not be in week 1 at all. Instead, they will be in week 52 of the preceding year! For example, the year 2000 began on Saturday. Under the ISO standard, weeks always begin on a Monday. In 2000, the first Thursday was Jan-6, so week 1 begins the preceding Monday, or Jan-3. Therefore, the first two days of 2000, Jan-1 and Jan-2, fall into week 52 of 1999.

An ISO week number may be between 1 and 53. Under the ISO standard, week 1 will always have at least 4 days. If 1-Jan falls on a Friday, Saturday, or Sunday, the first few days of the year are defined as being in the last (52nd or 53rd) week of the previous year.

Unlike absolute week numbers, not every year will have a week 53. For example, the year 2000 does not have a week 53. Week 52 begins on Monday, 25-Dec, and ends on Sunday, 31-Dec. But the year 2004 does have a week 53, from Monday, 27-Dec , through Friday, 31-Dec.
Старый 20.02.2007, 10:12   #11  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от moid Посмотреть сообщение
WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ;
И получиться, то что надо...
Да ну? Сегодня какая неделя года? Восьмая. Какой месяц? Второй. 8-2*4 +1 = 1. Сейчас первая неделя февраля?

Цитата:
Сообщение от Gustav Посмотреть сообщение
Результат: 2.
1.
Старый 20.02.2007, 10:17   #12  
moid is offline
moid
Участник
 
84 / 10 (1) +
Регистрация: 05.02.2007
X++:
WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ;
Результат = 1, а не 2

Или если ввести дату
WeekOfMonth = (wkofyr(28\2\2007) - mthofyr(28\2\2007)*4 + 1) ;
результат = 2

Какие у тебя проблемы не знаю
Старый 20.02.2007, 10:18   #13  
moid is offline
moid
Участник
 
84 / 10 (1) +
Регистрация: 05.02.2007
упс... извиняюсь... запутался в датах
Старый 20.02.2007, 10:19   #14  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Айм сорри, но помоему должно быть 3....
Старый 20.02.2007, 10:21   #15  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
То есть сейчас таки первая неделя месяца?
Оригинально. Я бы (если смотреть по Аксаптовскому календарю), сказал что сейчас 4ая неделя месяца, но судя по сообщению о ISO Week numbers - это тоже не верно

А приведите, пожалуйста, пару примеров, какие результаты вы хотите видеть для различных дат.
Старый 20.02.2007, 10:23   #16  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от oip Посмотреть сообщение
1.
Ага. Виноват!
Я в джобе опечатался и написал 20\07\2007, а здесь менял от руки today на литерал.
Ну, кстати, еще один тест. 20 июля - тоже явно не 2-я неделя
Старый 20.02.2007, 10:24   #17  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Gustav Посмотреть сообщение
Ну, кстати, еще один тест.
Да чего тут тестировать, если с первого взгляда видно, что написана ерунда?
Старый 20.02.2007, 10:36   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А если вот так?
Может и околесица, но вроде результаты совподают с (моими, во всяком случае) ожиданиями

X++:
static void Job17(Args _args)
{
    int         fullWeeks;
    transDate   curDate;
    ;

    curDate = SystemDateGet();
//    curDate = mkDate(02, 04, 2007);
    fullWeeks = (dayOfMth(curDate) - dayOfWk(curDate) - dayOfWk(dateStartMth(curDate))) / 7;
    //full weeks can be negative ;)

    info(strFmt("Номер недели месяца - %1", fullWeeks + 2));
}
Старый 20.02.2007, 10:45   #19  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Gustav Посмотреть сообщение
Зависит от того, что Вы вкладываете в это понятие:
- можно конкретное число месяца поделить на 7 и округлить в нужную сторону
- а можно вычислить неделю года от конкретного числа месяца и потом из нее вычесть неделю года от первого числа этого месяца
Я коллеге сразу предлагал сначала определиться:

X++:
static void Job11(Args _args)
{
    ;
    // ЛИБО
    info( int2str( trunc((dayOfMth(today())-1)/7) + 1 ) );

    // ЛИБО
    info( int2str( wkofyr(today()) - wkofyr(dateStartMth(today())) + 1) );
}

P.S. Дозвольте еще сюда эту темку до кучи прицепить. Может, на что сгодится. Люблю я всякие такие штучки с датами.
Старый 03.12.2009, 16:54   #20  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
Цитата:
Сообщение от Gustav Посмотреть сообщение
Я коллеге сразу предлагал сначала определиться:

X++:
static void Job11(Args _args)
{
    ;
 
    // ЛИБО
    info( int2str( wkofyr(today()) - wkofyr(dateStartMth(today())) + 1) );
}
Некорректно определяет неделю для января/конца декабря (из-за упомянутого выше стандарта ISO Week numbers).
Например, для 11.01.2010 получается -50, для 31.12.2008 = -47...

Вот "самый" правильный вариант:
X++:
// Номер недели месяца
static int wkOfMth(date _date)
{
    return (dayOfMth(_date) + dayOfWk(dateStartMth(_date)) + 5) div 7;
}
Теги
дата, функции

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Номер сеанса активного пользователя KiselevSA DAX: Администрирование 3 22.11.2006 14:32
Почему не дает проставлять инв.номер ОС через закупку? Pismarkina DAX: Функционал 5 03.11.2006 15:49
Код аналитики 'Номер партии' отмечен в складских проводках со значением Antidot DAX: Программирование 9 29.07.2005 10:57
Номер накладной поставщика в purchFormLetter.update SNG DAX: Программирование 8 24.03.2004 10:03
Номер партии Biosoft DAX: Функционал 0 01.07.2003 14:07

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

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

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