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
Форумы портала PHP.SU :: Версия для печати :: Как определить вторую пятницу месяца?
Форумы портала PHP.SU » PHP » Программирование на PHP » Как определить вторую пятницу месяца?

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

1. Gover - 18 Марта, 2010 - 20:53:24 - перейти к сообщению
Здравствуйте. Подскажите как можно определить какой датой будет вторая пятница месяца, или первый (последний) понедельник месяца и т.п.?
2. JustUserR - 19 Марта, 2010 - 18:47:18 - перейти к сообщению
Gover пишет:
Здравствуйте. Подскажите как можно определить какой датой будет вторая пятница месяца, или первый (последний) понедельник месяца и т.п.?
Например с помощью функции http://www.php.su/functions/?mktime вы можете создать временную метку на начало месяца и пролистывая даты в месяце определять соответствуюие дни недели с помощью функции date("w")
3. Champion - 19 Марта, 2010 - 19:16:34 - перейти к сообщению
А лучше определить каким днем недели является первое число месяца и прибавить сколько надо.
(Добавление)
Т.е. если первое число месяца среда, то вторая пятница на 9 дней позже. Откуда 9 - ясно? Определить какой день - JustUserR написал как.
4. JustUserR - 19 Марта, 2010 - 19:18:35 - перейти к сообщению
Champion пишет:
А лучше определить каким днем недели является первое число месяца и прибавить сколько надо
Да можно и так - на самом деле вариантов работы с датами очень много - главное не запутаться что прибавлять а что вычитать
5. jfr - 19 Марта, 2010 - 20:23:30 - перейти к сообщению
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.  
6. Gover - 19 Марта, 2010 - 23:41:09 - перейти к сообщению
Спасибище приогромное Подмигивание
7. JustUserR - 20 Марта, 2010 - 11:44:52 - перейти к сообщению
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. }
Вы ей передаете месяц/год и желаемый день недели и получаее список всех чисел с данным днем недели
8. jfr - 20 Марта, 2010 - 14:51:50 - перейти к сообщению
Gover пишет:
Спасибище приогромное Подмигивание


Пожалуйста Улыбка
9. movEAX - 20 Марта, 2010 - 17:45:04 - перейти к сообщению
Способ попроще и без циклов.
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;
10. jfr - 20 Марта, 2010 - 19:12:26 - перейти к сообщению
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, причем они повторяются циклично Улыбка , тут нам нужен цикл как никогда Улыбка
11. Champion - 20 Марта, 2010 - 19:42:38 - перейти к сообщению
jfr пишет:
Ваш скрипт должен вычислить иногда следующую пятницу а иногда вторую пятницу относительно текущей (вводимой) дате, а не вторую пятницу того месяца
Champion пишет:
А лучше определить каким днем недели является первое число месяца и прибавить сколько надо.
jfr пишет:
Почему именно цикл? Дни недели у нас всего лишь 7, причем они повторяются циклично Улыбка , тут нам нужен цикл как никогда
Ну да, а если надо почитать сколько лет прошло с 1901 года по 2010, мы конечно же напишем
for($y = 1901, $c = 0; $y <= 2010; $y++, $c++); echo $c.
Как же без цикла? Он круче вычитания, да.
12. jfr - 20 Марта, 2010 - 19:51:13 - перейти к сообщению
Champion пишет:
jfr пишет:
Ваш скрипт должен вычислить иногда следующую пятницу а иногда вторую пятницу относительно текущей (вводимой) дате, а не вторую пятницу того месяца
Champion пишет:
А лучше определить каким днем недели является первое число месяца и прибавить сколько надо.
jfr пишет:
Почему именно цикл? Дни недели у нас всего лишь 7, причем они повторяются циклично Улыбка , тут нам нужен цикл как никогда
Ну да, а если надо почитать сколько лет прошло с 1901 года по 2010, мы конечно же напишем
for($y = 1901, $c = 0; $y <= 2010; $y++, $c++); echo $c.
Как же без цикла? Он круче вычитания, да.


Champion, я с Вами согласен, но тут у нас задача совсем другая, дни недели всего лишь 7, а месяц у нас без разницы какой (год тем более Улыбка ), и причем не надо вычислить целый век Улыбка
13. Champion - 20 Марта, 2010 - 20:12:43 - перейти к сообщению
Цикл с ифами можно было бы использовать, если бы ты не знал, в каком порядке идут дни в неделе. Но ты ведь знаешь, в каком они порядке и сколько их. Подумай, насколько цикл с ифами медленнее двух вычитаний.
Да и при том там не только ифы, там дата еще каждый раз вычисляется и форматируется.
14. jfr - 20 Марта, 2010 - 20:39:05 - перейти к сообщению
как раз тут нам не известно в каком порядке идут дни недели сначало месяца, это надо вычислить конечно закономерность тут есть, находя первое число- какой день недели будет и прибавить к ней сколько-то дней чтобы получить например пятницу, и при этом получаем первую пятницу например. И так прибавляя 7 дней можем находить вторую пятницу и т.д. Все это арифметическое вычисление, можно конечно определить точный день необходимой недели, но цикл решает все-таки эту задачу красивее, а код movEAX имеет нимного недостаток. Все-таки я вас не отрицаю Champion.
15. movEAX - 20 Марта, 2010 - 21:33:21 - перейти к сообщению
jfr пишет:
Почему именно цикл? Дни недели у нас всего лишь 7, причем они повторяются циклично , тут нам нужен цикл как никогда

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

 

Powered by ExBB FM 1.0 RC1