我目前有这段代码:
$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
)
任何人都可以帮助改变我的代码或生成新代码,以获得我想要的输出吗?
答案 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等......