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

 PHP.SU

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


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

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



Новичок


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


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




Здравствуйте. Подскажите как можно определить какой датой будет вторая пятница месяца, или первый (последний) понедельник месяца и т.п.?
 
 Top
JustUserR
Отправлено: 19 Марта, 2010 - 18:47:18
Post Id



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


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


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




Gover пишет:
Здравствуйте. Подскажите как можно определить какой датой будет вторая пятница месяца, или первый (последний) понедельник месяца и т.п.?
Например с помощью функции http://www.php.su/functions/?mktime вы можете создать временную метку на начало месяца и пролистывая даты в месяце определять соответствуюие дни недели с помощью функции date("w")


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



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


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


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




А лучше определить каким днем недели является первое число месяца и прибавить сколько надо.
(Добавление)
Т.е. если первое число месяца среда, то вторая пятница на 9 дней позже. Откуда 9 - ясно? Определить какой день - JustUserR написал как.
 
 Top
JustUserR
Отправлено: 19 Марта, 2010 - 19:18:35
Post Id



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


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


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




Champion пишет:
А лучше определить каким днем недели является первое число месяца и прибавить сколько надо
Да можно и так - на самом деле вариантов работы с датами очень много - главное не запутаться что прибавлять а что вычитать


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



Посетитель


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


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

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $day=19;  //любым методом
  5. $month=3;   // присвойте
  6. $year=2010;  // эти переменные $day $month $year или оставьте просто так :)
  7.  
  8.  
  9.  
  10.     for ($i=1;$i<=7;$i++)
  11.      {    $date=mktime(0,0,0,$month,$i,$year);
  12.           if (date( 'l', $date )=='Friday')
  13.            {  $first_friday=date("M-d-Y", mktime(0,0,0,$month,$i,$year));
  14.               $second_friday=date("M-d-Y", mktime(0,0,0,$month,$i+7,$year));
  15.            }
  16.       }
  17.  echo $second_friday;
  18.  
  19. ?>
  20.  

(Отредактировано автором: 19 Марта, 2010 - 20:24:33)

 
 Top
Gover
Отправлено: 19 Марта, 2010 - 23:41:09
Post Id



Новичок


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


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




Спасибище приогромное Подмигивание
 
 Top
JustUserR
Отправлено: 20 Марта, 2010 - 11:44:52
Post Id



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


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


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




Gover Могу даже привести функцию которая будет возвращать массив чисел месяца для определенных дней недели
PHP:
скопировать код в буфер обмена
  1. function get_dates($month, $year, $wday) {$all_dates=array();
  2. $btime=mktime(0, 0, 0, $month, 1, $year);
  3. while(date("n",$btime)==$month)
  4. {if(date("w")==$wday) {$all_dates[]=date("j",$btime);}
  5. else {}
  6. $btime+=60*60*24; }
  7. }
Вы ей передаете месяц/год и желаемый день недели и получаее список всех чисел с данным днем недели


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



Посетитель


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


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

[+]


Gover пишет:
Спасибище приогромное Подмигивание


Пожалуйста Улыбка
 
 Top
movEAX
Отправлено: 20 Марта, 2010 - 17:45:04
Post Id



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


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


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




Способ попроще и без циклов.
PHP:
скопировать код в буфер обмена
  1. $d = 11;
  2. $mnth = 07;
  3. $yr = 2010;
  4. $dt = strtotime($d.'-'.$mnth.'-'.$yr);
  5. $wd = date('w',$dt);
  6. echo $nxtFrd = $d + 12 - $wd;


-----
армия.. самое убогое место
 
 Top
jfr
Отправлено: 20 Марта, 2010 - 19:12:26
Post Id



Посетитель


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


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

[+]


movEAX пишет:
Способ попроще и без циклов.
PHP:
скопировать код в буфер обмена
  1. $d = 11;
  2. $mnth = 07;
  3. $yr = 2010;
  4. $dt = strtotime($d.'-'.$mnth.'-'.$yr);
  5. $wd = date('w',$dt);
  6. echo $nxtFrd = $d + 12 - $wd;


таким образом Ваш скрипт должен вычислить иногда следующую пятницу а иногда вторую пятницу относительно текущей (вводимой) дате, а не вторую пятницу того месяца, а Gover спрашивает "Здравствуйте. Подскажите как можно определить какой датой будет вторая пятница месяца". Именно цикл помогает нам вычислить точную вторую пятницу месяца и т.д.

Почему именно цикл? Дни недели у нас всего лишь 7, причем они повторяются циклично Улыбка , тут нам нужен цикл как никогда Улыбка

(Отредактировано автором: 20 Марта, 2010 - 19:30:17)

 
 Top
Champion Супермодератор
Отправлено: 20 Марта, 2010 - 19:42:38
Post Id



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


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


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




jfr пишет:
Ваш скрипт должен вычислить иногда следующую пятницу а иногда вторую пятницу относительно текущей (вводимой) дате, а не вторую пятницу того месяца
Champion пишет:
А лучше определить каким днем недели является первое число месяца и прибавить сколько надо.
jfr пишет:
Почему именно цикл? Дни недели у нас всего лишь 7, причем они повторяются циклично Улыбка , тут нам нужен цикл как никогда
Ну да, а если надо почитать сколько лет прошло с 1901 года по 2010, мы конечно же напишем
for($y = 1901, $c = 0; $y <= 2010; $y++, $c++); echo $c.
Как же без цикла? Он круче вычитания, да.
 
 Top
jfr
Отправлено: 20 Марта, 2010 - 19:51:13
Post Id



Посетитель


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


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

[+]


Champion пишет:
jfr пишет:
Ваш скрипт должен вычислить иногда следующую пятницу а иногда вторую пятницу относительно текущей (вводимой) дате, а не вторую пятницу того месяца
Champion пишет:
А лучше определить каким днем недели является первое число месяца и прибавить сколько надо.
jfr пишет:
Почему именно цикл? Дни недели у нас всего лишь 7, причем они повторяются циклично Улыбка , тут нам нужен цикл как никогда
Ну да, а если надо почитать сколько лет прошло с 1901 года по 2010, мы конечно же напишем
for($y = 1901, $c = 0; $y <= 2010; $y++, $c++); echo $c.
Как же без цикла? Он круче вычитания, да.


Champion, я с Вами согласен, но тут у нас задача совсем другая, дни недели всего лишь 7, а месяц у нас без разницы какой (год тем более Улыбка ), и причем не надо вычислить целый век Улыбка

(Отредактировано автором: 20 Марта, 2010 - 19:52:54)

 
 Top
Champion Супермодератор
Отправлено: 20 Марта, 2010 - 20:12:43
Post Id



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


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


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




Цикл с ифами можно было бы использовать, если бы ты не знал, в каком порядке идут дни в неделе. Но ты ведь знаешь, в каком они порядке и сколько их. Подумай, насколько цикл с ифами медленнее двух вычитаний.
Да и при том там не только ифы, там дата еще каждый раз вычисляется и форматируется.
 
 Top
jfr
Отправлено: 20 Марта, 2010 - 20:39:05
Post Id



Посетитель


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


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

[+]


как раз тут нам не известно в каком порядке идут дни недели сначало месяца, это надо вычислить конечно закономерность тут есть, находя первое число- какой день недели будет и прибавить к ней сколько-то дней чтобы получить например пятницу, и при этом получаем первую пятницу например. И так прибавляя 7 дней можем находить вторую пятницу и т.д. Все это арифметическое вычисление, можно конечно определить точный день необходимой недели, но цикл решает все-таки эту задачу красивее, а код movEAX имеет нимного недостаток. Все-таки я вас не отрицаю Champion.
 
 Top
movEAX
Отправлено: 20 Марта, 2010 - 21:33:21
Post Id



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


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


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




jfr пишет:
Почему именно цикл? Дни недели у нас всего лишь 7, причем они повторяются циклично , тут нам нужен цикл как никогда

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

(Отредактировано автором: 21 Марта, 2010 - 13:46:22)



-----
армия.. самое убогое место
 
 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