2013-10-03 4 views
0

Я пытался получить дату текущей недели в четверг, используя приведенную ниже кодкак найти thurdays текущего месяца в PHP

date('m/d/y',strtotime('thursday this week')); 

Как выше, как я могу получить текущий месяц всех даты в четверг в PHP.

+0

Фактически в моем приложении я использую один продукт на основе календаря. В том, что я должен показывать только текущие месячные продукты. Поэтому я задал этот вопрос. – mangala

ответ

1

Вы можете отфильтровать даты, как это:

$sDay = 'Thursday'; 
$rgTime = array_filter(
    range(strtotime('first day of this month'), strtotime('last day of this month'), 3600*24), 
    function($iTime) use ($sDay) 
    { 
     return date('l', $iTime) == $sDay; 
    }); 

Альтернативный способ получить $rgTime будет:

$rgNums = ['first', 'second', 'third', 'fourth', 'fifth']; 
$rgTime = []; 
$sDay = 'Thursday'; 
foreach($rgNums as $sNum) 
{ 
    $iTime = strtotime($sNum.' '.$sDay.' of this month'); 
    if(date('m', $iTime)==date('m')) 
    { 
     //this check is needed since not all months have 5 specific week days 
     $rgTime[]=$iTime; 
    } 
} 

-Теперь, если вы хотите получить конкретный формат, например Y-m-d, который будет:

$rgTime = array_map(function($x) 
{ 
    return date('Y-m-d', $x); 
}, $rgTime); 

Редактировать

Если вы хотите иметь несколько дней в неделю, это также легко. Для первого образца, который будет:

$rgDays = ['Tuesday', 'Thursday']; 
$rgTime = array_filter(
    range(strtotime('first day of this month'), strtotime('last day of this month'), 3600*24), 
    function($iTime) use ($rgDays) 
    { 
     return in_array(date('l', $iTime), $rgDays); 
    }); 
+0

hi firend .. он сработал ... как я могу попасть в комбинацию как в четверг, так и во вторник. – mangala

+0

Во-первых, вы должны указать это в своем вопросе. –

+0

ya я нашел ответ .. спасибо ... я использовал тот же для tuesdays .. и я объединил оба массива. я получил текущие месяцы во вторник и в четверг ... – mangala

0

попробуйте это. Должно работать :)

<? 
    $curMonth = date("m"); 
    $start = strtotime("next Thursday - 42 days"); 
    for ($i=1; $i < 15; $i++){ 
     $week = $i*7; 
     if (date("m",strtotime("next Thursday - 42 days + $week days")) == $curMonth){ 
      $monthArr[] = date("m/d/y",strtotime("next Thursday - 42 days + $week days")); 
     } 
    } 


print_r($monthArr); 

?> 

WORKING CODE

2

Желательно использовать улучшенные возможности по дате и времени, которые поставляются с PHP 5.3.0. А именно, классы DatePeriod и DateInterval.

<?php 

$start = new DateTime('first thursday of this month'); 
$end  = new DateTime('first day of next month'); 
$interval = new DateInterval('P1W'); 
$period = new DatePeriod($start, $interval , $end); 

foreach ($period as $date) { 
    echo $date->format('c') . PHP_EOL; 
} 

Редактировать

Более сложная фильтрация может осуществляться различными способами, но вот простой подход к показу каждый вторник и четверг в месяц.

... 
$interval = new DateInterval('P1D'); 
... 
foreach ($period as $date) { 
    if (in_array($date->format('D'), array('Tue', 'Thu'), TRUE)) { 
     echo $date->format('c') . PHP_EOL; 
    } 
} 
Смежные вопросы