2011-08-09 49 views
1

我現在有這樣的代碼:UNIX的顯示PHP數組時間戳的特定格式字符串

$dates = array(); 
foreach($data['sc_event_dates'] as $date) { 
    if($date > time()) { 
     $dates[] = date(empty($dates) ? "D d M": "d M", $date); 
    } 
} 
echo implode(", ", $dates); 

,它顯示是這樣的:

Thu 11 Aug, 18 Aug, 25 Aug, 01 Sep, 08 Sep, 15 Sep 

但我需要做的組每個月的日期如此輸出看起來像這樣:

Thu 11, 18, 25 Aug, 01, 08, 15 Sep 

$data['sc_event_dates']持有數組unix時間戳,並訂購ascending訂單。

還需要忽略當前時間之前的日期。

下面是一些示例數據:

Array 
(
    [0] => 1313020800 
    [1] => 1313625600 
    [2] => 1314230400 
    [3] => 1314835200 
    [4] => 1315440000 
    [5] => 1316044800 
) 

任何一個可以幫助改變我的代碼,或產生新的代碼,讓我期望的輸出?

回答

1
$dates = array(); 
foreach($data['sc_event_dates'] as $key => $date) { 
    if($date > time()) { 

     $next = ++$key; 
     $format = 'd'; 

     if(empty($dates)) { 

      $format = 'D '.$format; 
     } 

     if(!isset($data['sc_event_dates'][$next]) || date('n', $date) != date('n', $data['sc_event_dates'][$next])) { 

      $format .= ' M'; 
     } 

     $dates[] = date($format, $date); 
    } 
} 
echo implode(", ", $dates); 
0

你會想要一個簡單的狀態機來跟蹤哪個月正在顯示並根據需要調整輸出。

$prev_month = null; 
foreach(... as $date) { 
    if ($date < time()) { 
     continue; 
    } 
    $day = date('D', $date); 
    $day_num = date('d', $date); 
    $month = date('M'); 
    if ($prev_month != $month) { 
     echo $month, ' '; 
     $prev_month = $month; 
     $sep = ''; 
    } 
    echo $day_num, $sep; 
    $sep = ', '; 
} 

沒有測試,情況因人而異,等等