|
|
|
|
|
для: technic611
(09.04.2012 в 15:13)
| | Методы чего?
Если о том как при смене года менять и месяц, то зачем?
Что еще вам надо?
Вот я, к примеру, так и не увидел до сих пор, где же вы проверяете високосный год. Либо вы делаете это каким-то своим запутанным методом понятным только вам (хотя для этого достаточно разделить год по модулю 4), либо вообще ничего не делаете, а значит неминуема ошибка. У вас до сих пор февраль в массиве определен 29 днями, словно ваш календарь рассчитан только на 2012, или исключительно на високосные года. Тоже самое и с днем недели, откуда берется этот $week, что вы там считаете...
А ведь, если вам не разрешено пользоваться функциями работы с датой, что является полным идиотизмом (но это так, к слову), то значит вы должны получать день недели первого дня каждого месяца, начиная с известной опорной точки. Ваш календарь с 2012 года, а первым днем января этого года является воскресенье. Учитывая то, что работаем с массивами, то этот день будет иметь индекс: $firstday = 6;. Узнаем сколько дней в неделе занимают первая неделя этого месяца: 7-6=1. Количество этих дней нужно вычитать из общего числа дней, равных как число лет (от стартового года календаря) помноженное на 365, плюс по одному дню для каждого входящего високосного года в это число лет. Естественно, что если число лет равно 1, то нужно брать сумму только дней от января по месяц предыдущий текущему, тоже самое учитывать и для последнего года.
А далее получать день недели:
$week_day = (($days % 28)-(7-$firstday))%7;
Это будет возвращать индекс ячейки таблицы с которой и надо начинать вывод дней календаря. | |
|
|
|
|
|
|
|
для: confirm
(08.04.2012 в 15:42)
| | Кто-нибудь предложит какие-нибудь методы? | |
|
|
|
|
|
|
|
для: technic611
(08.04.2012 в 15:29)
| | А вы можете представить такую ситуацию? Вроде бы как по логике действий, пользователь смещается в календаре либо выбирая год, либо месяц.
Ваш календарь должен выполнять две однотипные операции - указывать скрипту что изменяется по требованию пользователя и в каком направлении. Если выбран год, значит в зависимости от выбранного направления либо добавлять к текущему году 1, либо отнимать, проверяя установленные вами пределы календаря.
Тоже самое для месяца, с той лишь разницей, что вы должны еще проверять, достигнут ли край года, и надо ли осуществить и переход на следующий год, с одновременной сменой месяца.
Ну и хранить на клиенте текущий год и месяц, если вам и сессии не разрешены по условию. | |
|
|
|
|
|
|
|
для: confirm
(07.04.2012 в 14:48)
| | это пустой разговор. а как быть если листать год и тут же одновременно месяц? | |
|
|
|
|
|
|
|
для: technic611
(07.04.2012 в 12:17)
| | Ясно.
Вы же задаете изначально стартовую точку календаря (как можете указать и предел его), вы прописываете параметры в url кнопок. Вот и вставляйте их, день вперед/назад, с проверкой. Только число дней февраля нужно корректировать, а так как в нашем календаре високосный год, это каждый четвертый, значит удобнее в массиве для этого месяца указать 28 дней.
Ну а год еще проще - просто плюсуйте/минусуйте по 1 к текущему году, проверяя достижение краев календаря. | |
|
|
|
|
|
|
|
для: technic611
(07.04.2012 в 12:17)
| | разобрался в чем проблема. теперь нужно понять как менять месяцы если поменять год | |
|
|
|
|
|
|
|
для: confirm
(07.04.2012 в 10:27)
| | по заданию date использовать нельзя | |
|
|
|
|
|
|
|
для: technic611
(07.04.2012 в 10:18)
| | Это почему нельзя? Не считать пустые ячейки текущего месяца, а узнать день недели первого дня текущего месяца. Функция date() может вернуть все необходимое для календаря, а strtotime() позволит работать с одной get-переменной, чтобы листать календарь.
Я поэтому и говорил - так как бы я хотел сделать, это тайна покрытая мраком. ) | |
|
|
|
|
|
|
|
для: confirm
(07.04.2012 в 07:21)
| | использовать функцию date () нельзя. я так понял нужно считать пустые ячейки текущего месяца и потом делать отступ в следующем месяце на это кол-во ячеек, некоторые месяцы работают верно, а некоторые не правильно заполняют таблицу | |
|
|
|
|
|
|
|
для: technic611
(07.04.2012 в 00:04)
| | Я не ради, чтобы уязвить вас написал такое, просто имеют опыт, когда пишешь, пишешь, а получается напрасно. Поэтому коротко - я знаю, что языки программирования имеют инструменты для работы с датой, и php не исключение. Вот это бы я и использовал.
А в чем выражается некорректность? | |
|
|
|
|