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 :: Как определить вторую пятницу месяца? [4]

 PHP.SU

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


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

> Без описания
jfr
Отправлено: 24 Марта, 2010 - 21:53:12
Post Id



Посетитель


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


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

[+]


О проверке аргументов речь пока не шла - но думаю если надо тот кому нужна эта функция добавит соответствующие проверки Улыбка
 
 Top
Champion Супермодератор
Отправлено: 25 Марта, 2010 - 08:36:56
Post Id



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


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


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




jfr пишет:
MovEAX, это Чемпион не мог осмыслить
А точне, JustUser вроде. В ответ на то, что я указал ему, что у него данные не проверяются, он указал на такую же ошибку у movEAX, вариант которого был лучше на тот момент. А штука не в отрицательном значении, а в любом, которое не [1..12] в месяце.

Думаю, если никто не будет против, можно тему почистить и закрыть?
 
 Top
JustUserR
Отправлено: 25 Марта, 2010 - 14:36:29
Post Id



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


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


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




Champion пишет:
А точне, JustUser вроде. В ответ на то, что я указал ему, что у него данные не проверяются, он указал на такую же ошибку у movEAX, вариант которого был лучше на тот момент. А штука не в отрицательном значении, а в любом, которое не [1..12] в месяце
Речь вообще идет не на проверку вводимых аргументов на правильность - пусть это остается на совести пользователя!
А теперь внимание о чем же шла речь - мы ищем какой день недели будет у первого дня месяца (Пусть это X Улыбка и определяем разницу искомого дня недели (Пусть это Y Улыбка с ним то есть X-Y - но ведь данная разность может быть и отрицательносй и в таком случае первый искомый день недели имеет индекс 1 - в противоположнос случае ноль
Финальный вариант
PHP:
скопировать код в буфер обмена
  1. function get_wday($m,$y,$wday,$i){
  2. $wd=date('w',strtotime('01-'.$m.'-'.$y)); // Получаем первый день недели
  3. $j=(($wday-$wd)<0) ? $i : $i+1; // Вырвниваем чтобы первый искомый день был всегда первым
  4. return (($wday-$wd)+1+7*$j); // Выводим i-ый день недели
  5. }
  6. echo get_wday(3,2010,5,1); // Вторая пятница марта 2010 года

Champion пишет:
Думаю, если никто не будет против, можно тему почистить и закрыть?
Только чистить не слишком сильно а закрыть можно но я пока это делать не буду Улыбка


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



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


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


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




JustUserR пишет:
Только чистить не слишком сильно а закрыть можно но я пока это делать не буду
Тогда ты потом сделай) Ты активнее тут обсуждал, тебе виднее, где главное.
 
 Top
jfr
Отправлено: 27 Марта, 2010 - 19:49:56
Post Id



Посетитель


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


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

[+]


JustUserR пишет:

Финальный вариант
PHP:
скопировать код в буфер обмена
  1. function get_wday($m,$y,$wday,$i){
  2. $wd=date('w',strtotime('01-'.$m.'-'.$y)); // Получаем первый день недели
  3. $j=(($wday-$wd)<0) ? $i : $i+1; // Вырвниваем чтобы первый искомый день был всегда первым
  4. return (($wday-$wd)+1+7*$j); // Выводим i-ый день недели
  5. }
  6. echo get_wday(3,2010,5,1); // Вторая пятница марта 2010 года



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



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


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


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




Champion пишет:
Тогда ты потом сделай) Ты активнее тут обсуждал, тебе виднее, где главное.
Спасибо Почистить-то я могу - главное чтобы участники темы не обиделись - надо выбрать основное Улыбка
jfr пишет:
JustUserR, этот код все-таки еще имеет недостаток, проверьте первый понедельник и второй понедельник в январе 2010 года, увидете недостатки, вот конечный код
Догадываюсь в чем дело - в тренарном опеаторе в части else должно быть $i-1
Ваш финальный вариант кода конечно тоже хороший Улыбка


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


Новичок


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


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




Здравствуйте, извините, что поднимаю тему, но не могли бы вы показать на примере выше, как можно выбрать каждый третий либо второй день недели. начиная с сегодншнего дня, например.
Заранее спасибо
 
 Top
Roha
Отправлено: 04 Апреля, 2012 - 15:02:35
Post Id


Новичок


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


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




to jfr:
Немного подправил код, так как были проблемы с первым воскресеньем месяца, если оно первое число. Но теперь функция по идее всё выдаёт правильно:
PHP:
скопировать код в буфер обмена
  1. function search_week($month,$year,$day_of_week,$which) {                       
  2. $dt = $day_of_week+7*$which-6-date('N',mktime(0,0,0,$month,1,$year));
  3. $answer=date("Y-m-d", mktime(0,0,0,$month,$dt,$year));
  4. return $answer;
  5. }

(Отредактировано автором: 04 Апреля, 2012 - 15:04:04)

 
 Top
EuGen Администратор
Отправлено: 04 Апреля, 2012 - 15:10:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




shakalaka пишет:
Отправлено: 24 Сентября, 2010 - 10:50:09
Roha пишет:

Отправлено: 04 Апреля, 2012 - 15:02:35

С новым годом.
Тема закрыта!


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 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