20.02.2007, 09:23 | #1 |
Участник
|
Номер недели
Какой ф-ей можно получить номер недели текущего месяца?
|
|
20.02.2007, 09:30 | #2 |
Moderator
|
Зависит от того, что Вы вкладываете в это понятие:
- можно конкретное число месяца поделить на 7 и округлить в нужную сторону - а можно вычислить неделю года от конкретного числа месяца и потом из нее вычесть неделю года от первого числа этого месяца Вы уверены, что Вам нужен именно месяц, а не год? |
|
20.02.2007, 09:33 | #3 |
Участник
|
В месяце есть 4 недели мне нужно узнать какая по счету текущая неделя.
|
|
20.02.2007, 09:34 | #4 |
MCT
|
Когда то писал что то подобное сейчас уже не помню, а посмотри для начала формочку SysDateLookup там прорисовываются на grid недели по определенному году
|
|
20.02.2007, 09:37 | #5 |
Участник
|
wkofyr - вот эта если кому пригодится
|
|
20.02.2007, 09:42 | #6 |
Участник
|
|
|
20.02.2007, 09:43 | #7 |
Moderator
|
|
|
20.02.2007, 09:56 | #8 |
Участник
|
Ну...
Вот по русски если чё : WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ; И получиться, то что надо... |
|
20.02.2007, 10:08 | #9 |
Moderator
|
|
|
20.02.2007, 10:12 | #10 |
Участник
|
В Аксапте используются 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 |
Axapta
|
|
|
20.02.2007, 10:17 | #12 |
Участник
|
X++: WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ; Или если ввести дату WeekOfMonth = (wkofyr(28\2\2007) - mthofyr(28\2\2007)*4 + 1) ; результат = 2 Какие у тебя проблемы не знаю |
|
20.02.2007, 10:18 | #13 |
Участник
|
упс... извиняюсь... запутался в датах
|
|
20.02.2007, 10:19 | #14 |
Программатор
|
Айм сорри, но помоему должно быть 3....
|
|
20.02.2007, 10:21 | #15 |
Участник
|
То есть сейчас таки первая неделя месяца?
Оригинально. Я бы (если смотреть по Аксаптовскому календарю), сказал что сейчас 4ая неделя месяца, но судя по сообщению о ISO Week numbers - это тоже не верно А приведите, пожалуйста, пару примеров, какие результаты вы хотите видеть для различных дат. |
|
20.02.2007, 10:23 | #16 |
Moderator
|
|
|
20.02.2007, 10:24 | #17 |
Axapta
|
|
|
20.02.2007, 10:36 | #18 |
Участник
|
А если вот так?
Может и околесица, но вроде результаты совподают с (моими, во всяком случае) ожиданиями 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 |
Moderator
|
Цитата:
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 |
Участник
|
Цитата:
Например, для 11.01.2010 получается -50, для 31.12.2008 = -47... Вот "самый" правильный вариант: X++: // Номер недели месяца static int wkOfMth(date _date) { return (dayOfMth(_date) + dayOfWk(dateStartMth(_date)) + 5) div 7; } |
|