Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как определить вторую пятницу месяца? [3]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): « 1 2 [3] 4 »   

> Без описания
jfr
Отправлено: 23 Марта, 2010 - 16:27:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


Champion, я говорю 23-марта- это вторник, ты говоришь 24-марта - это среда, значит результат будет меняться. Радость Вот закономерность видишь Улыбка

Приведу следующий пример:
23-марта это -вторник, вторник - это 2 день недели;
24-марта это -среда, среда - это 3 день недели;
6-марта это -суббота, суббота - это 6 день недели;


доказательство Улыбка на закономерность случайных дней в марте:

(23-2)%7=(24-3)%7=(6-6)%7

Закономерность успешно доказана Улыбка

(Отредактировано автором: 23 Марта, 2010 - 16:30:07)

 
 Top
Champion Супермодератор
Отправлено: 23 Марта, 2010 - 16:37:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




for ($i = 1; $i++ <=31;) search_week($i,3,2010,5,2); будет разный результат?
 
 Top
jfr
Отправлено: 23 Марта, 2010 - 16:50:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. function search_week($day,$month,$year,$day_of_week,$which) {
  3.  
  4. $dt = $day%7-date('w',mktime(0,0,0,$month,$day,$year))+$day_of_week+7*$which-7;
  5. $what_u_need=date("M-d-Y", mktime(0,0,0,$month,$dt,$year));
  6. echo $what_u_need;
  7. }
  8. for ($i=1;$i<=31;$i++)
  9. search_week($i,3,2010,5,2);
  10.  

?>
Прикреплено изображение (Нажмите для увеличения)
123.JPG

(Отредактировано автором: 23 Марта, 2010 - 16:52:05)

 
 Top
JustUserR
Отправлено: 23 Марта, 2010 - 16:53:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Champion пишет:
Короче вариант JustUserRа лучше.
Спасибо старался оптимизироваться Подмигивание
jfr пишет:
Не связано число 21 с пятницей, можно вставить 22 например
Зачем вообще нужна переменная $day если заместо нее можно в функциях mktime или strtotime можно указать строковую константу 1 - об этом и речь Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
jfr
Отправлено: 23 Марта, 2010 - 16:56:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


Я же не говорю зачем лишняя функция strtotime, если есть аргумент $day, я шучу Радость
 
 Top
JustUserR
Отправлено: 23 Марта, 2010 - 16:58:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




jfr пишет:
Я же не говорю зачем лишняя функция strtotime, если есть аргумент $day, я шучу
Так тем более хорошо - просто удалите из функции аргумент $day и замените его в реализации функции на единичку - чтобы не путать пользователя вашей замечательной функции Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
jfr
Отправлено: 23 Марта, 2010 - 21:59:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function search_week($month,$year,$day_of_week,$which) {
  4. $dt = $day_of_week+7*$which-6-date('w',mktime(0,0,0,$month,1,$year));
  5. $what_u_need=date("M-d-Y", mktime(0,0,0,$month,$dt,$year));
  6. echo $what_u_need;  }
  7. search_week(3,2010,5,2);
  8. ?>
  9.  
 
 Top
JustUserR
Отправлено: 24 Марта, 2010 - 09:07:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




jfr Да так заметно лучше - у нас с вами получились почти одинаковые функции Улыбка Только мы не учли один момент например если масяц начинается со вторника а мы ищем среду то превая среда будет иметь индекс 0 - а если мы ищем первый понедельник по он будет иметь индекс 1 - так что надо долбавить проверку на отричательность разности искомого и первого дня недели и если оно отрицательно но вычесть единицу из номера искомого дня


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
jfr
Отправлено: 24 Марта, 2010 - 17:32:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


оказывается, да точно не учли это, сам даже не заметил Улыбка
 
 Top
JustUserR
Отправлено: 24 Марта, 2010 - 17:59:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




jfr пишет:
Оказывается, да точно не учли это, сам даже не заметил
Да уж В моем примере эта штука исправляется с помощью тренарного оператра ?: в первой сточке - сделать проверку на отрицательное значение и все Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Gover
Отправлено: 24 Марта, 2010 - 20:23:52
Post Id



Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Февр. 2007  
Откуда: Беларусь


Помог: 0 раз(а)




Блин, не думал, что тема разовьется до таких масштабов... Подмигивание
 
 Top
jfr
Отправлено: 24 Марта, 2010 - 21:08:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function search_week($month,$year,$day_of_week,$which) {
  4. $dt = $day_of_week+7*$which-6-date('w',mktime(0,0,0,$month,1,$year));
  5. if (date('w',mktime(0,0,0,$month,1,$year))<=$day_of_week){
  6. $what_u_need=date("M-d-Y", mktime(0,0,0,$month,$dt,$year));
  7. echo $what_u_need; }
  8. else echo $what_u_need=date("M-d-Y", mktime(0,0,0,$month,$dt+7,$year));
  9. }
  10. search_week(3,2010,0,1);    // первое воскресенье в марте 2010г (7 марта)
  11. search_week(3,2010,0,2); // второе воскресенье в марте 2010г (14марта)
  12. search_week(1,2010,1,1);  // первый понедельник в январе 2010г (4 января)
  13.  
  14. search_week(3,2010,5,2); //наконец и вторая пятница :)
  15. ?>
  16.  
 
 Top
movEAX
Отправлено: 24 Марта, 2010 - 21:17:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




jfr пишет:
Не могу осмыслить результат работы echo getScndFrd(-12,1994) Улыбка


PHP:
скопировать код в буфер обмена
  1. ...
  2.     $ut = strtotime('01-'.abs($m).'-'.abs($y)); //unix time
  3. ...

И никаких условных операторов) Крутой


-----
армия.. самое убогое место
 
 Top
jfr
Отправлено: 24 Марта, 2010 - 21:24:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 332
Дата рег-ции: Март 2010  
Откуда: Таджикистан, Худжанд


Помог: 0 раз(а)

[+]


MovEAX, это Чемпион не мог осмыслить Радость , тоесть не мои комментария, то что написано у тебя Улыбка

Ну что касается Strtotime, она одна ничего не вычисляет Радость
 
 Top
movEAX
Отправлено: 24 Марта, 2010 - 21:31:08
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




jfr пишет:
Ну что касается Strtotime, она одна ничего не вычисляет

да она тут собственно не причем) больше внимание стоит уделить abs(), т.к. отпадает необходимость в условных операторах для проверки на отрицательность. Остается необходимым лишь проверка на диапазон допустимых значений.
jfr пишет:
тоесть не мои комментария, то что написано у тебя

не суть важна чьи это комментарии (честно, я даже не смотрел), я хотел показать простой вариант решения проблемы.

(Отредактировано автором: 24 Марта, 2010 - 21:32:59)



-----
армия.. самое убогое место
 
 Top
Страниц (4): « 1 2 [3] 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB