У меня проблема,
$fridays = array(); $fridays[0] = date('Ym-d', strtotime('first friday of this month')); $fridays[1] = date('Ym-d', strtotime('second friday of this month')); $fridays[2] = date('Ym-d', strtotime('third friday of this month')); $fridays[3] = date('Ym-d', strtotime('fourth friday of this month')); $fridays[4] = date('Ym-d', strtotime('fifth friday of this month'));
но нет пятой пятницы. Несколько месяцев – пятая пятница. Как проверить и не установить последний массив элементов?
$fifth = strtotime('fifth friday of this month'); if (date('m') === date('m', $fifth)) { $fridays[4] = date('Ym-d', $fifth); }
Я не на машине, чтобы проверить это, но как насчет чего-то вроде …
if(date('Ym-d', strtotime('fifth friday of this month')) > ""){ $fridays[4] = date('Ym-d', strtotime('fifth friday of this month')); }
Ссылка ниже делает точно то же самое и будет охватывать именно то, что вы хотите todo без неуклюжих, если такие утверждения, как описано выше.
ОЧЕНЬ Аналогичное чтение: далее …
месяц будет иметь 5 пятниц, только если он имеет 30 дней, а первая пятница – 1-й или 2-й день месяца, или если у нее 31 день, а первая пятница – 1-й, 2-й или 3-й день месяца, поэтому вы можете сделать условное заявление основанный на этом расчете на 5-й пятничный
Вы можете сделать это, используя функцию даты PHP. Получите месяц, который вы хотите в $timestamp
а затем сделайте что-то вроде этого:
<?php function fridays_get($month, $stop_if_today = true) { $timestamp_now = time(); for($a = 1; $a < 32; $a++) { $day = strlen($a) == 1 ? "0".$a : $a; $timestamp = strtotime($month . "-$day"); $day_code = date("w", $timestamp); if($timestamp > $timestamp_now) break; if($day_code == 5) @$fridays++; } return $fridays; } echo fridays_get('2011-02');
Вы можете найти аналогичную статью об этом: На PHP, как узнать, сколько сегодня прошло сегодня в этом месяце?
for($i=0;$i<=5;$i++) { echo date("d/m/y", strtotime('+'.$i.' week friday september 2012')); }
Я использовал это как основу для своего собственного решения:
$fridays = array(); $fridays[0] = date('d',strtotime('first fri of this month')); $fridays[1] = $fridays[0] + 7; $fridays[2] = $fridays[0] + 14; $fridays[3] = $fridays[0] + 21; $fridays['last'] = date('d',strtotime('last fri of this month')); if($fridays[3] == $fridays['last']){ unset($fridays['last']); } else { $fridays[4] = $fridays['last']; unset($fridays['last']); } print_r($fridays);
не$fridays = array(); $fridays[0] = date('d',strtotime('first fri of this month')); $fridays[1] = $fridays[0] + 7; $fridays[2] = $fridays[0] + 14; $fridays[3] = $fridays[0] + 21; $fridays['last'] = date('d',strtotime('last fri of this month')); if($fridays[3] == $fridays['last']){ unset($fridays['last']); } else { $fridays[4] = $fridays['last']; unset($fridays['last']); } print_r($fridays);
не$fridays = array(); $fridays[0] = date('d',strtotime('first fri of this month')); $fridays[1] = $fridays[0] + 7; $fridays[2] = $fridays[0] + 14; $fridays[3] = $fridays[0] + 21; $fridays['last'] = date('d',strtotime('last fri of this month')); if($fridays[3] == $fridays['last']){ unset($fridays['last']); } else { $fridays[4] = $fridays['last']; unset($fridays['last']); } print_r($fridays);
Мне нужно было собрать каждую пятницу каждую месяц, даже если их было 5, и это, казалось, сделало трюк, используя исходный вопрос в качестве моей основы.
У меня есть функция считать пятницу в моем собственном приложении … это может быть полезно для кого-то.
function countFridays($month,$year){ $ts=strtotime('first friday of '.$year.'-'.$month.'-01'); $ls=strtotime('last day of '.$year.'-'.$month.'-01'); $fridays=array(date('Ym-d', $ts)); while(($ts=strtotime('+1 week', $ts))<=$ls){ $fridays[]=date('Ym-d', $ts); }return $fridays; }