将UNIX时间戳的PHP数组显示为特定格式的字符串

时间:2011-08-09 16:14:07

标签: php formatting date

我目前有这段代码:

$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
)

任何人都可以帮助改变我的代码或生成新代码,以获得我想要的输出吗?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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 = ', ';
}

未经测试,YMMV等......