Показать PHP-массив меток времени UNIX в виде строки в определенном формате - PullRequest
1 голос
/ 09 августа 2011

У меня сейчас есть этот код:

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

1 голос
/ 09 августа 2011
$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 голосов
/ 09 августа 2011

Вы были бы простым конечным автоматом, чтобы отслеживать, какой месяц отображается, и настраивать вывод по необходимости.

$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 и т. Д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...