| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
VictorSmirnov 14.10.2003 15:33
Комментариев у меня больше чем вычислений,@wn[d][fd;wd]
# $fd - первый день года
$fd[^date::create($d.year;1;1)]
# $sd - дата конца первой недели. нумерация с 1
^if($fd.weekday == 0){ $sd(1) }{ $sd(8 - $fd.weekday) }
# Находим k, такое что
# $d.yearday + 1 = $sd + 1 + 7*k + m, где 0 <= m < 7
# В левой части у нас текущий день (начиная с 1)
# В правой части мы от первого дня второй недели отступаем ровное
# количество недель и еще меньше семи дней. Сколько недель отступили
# показывает искомая величина k
# нетрудно видеть, что
# k = ( $d.yearday - $sd ) \ 7
# Число недель равно k+2. Действительно, первую неделю мы пропустили
# потом k недель отступили и уже идет (k+1) + 1 неделя
^if($d.yearday < $sd){
# это тот редкий случай, когда наша формула не работает :)
$result(1)
}{
$result(($d.yearday - $sd)\7 + 2)
}Кстати, ваш вариант не работает для первого января, например.