Как мне отформатировать список дат из массива временных меток Unix?

Плагин WordPress, который я использую, выводит массив (который должен быть только двумя датами / временем), который выглядит следующим образом:

Array ( [0] => 1412037900 [1] => 1413340200 [2] => )

Я не уверен, почему есть конечный пустой узел, но в любом случае я пытаюсь получить список отформатированных дат / времени из этого.

У меня есть это в моем php (функция get_post_meta возвращает массив):

<?php global $post;
$date = get_post_meta( $post->ID, '_cmb2_date_time', true );
foreach ( $date as $item ) {
echo '<p>' . date("F j, Y, g:i a", (int)$item) . '</p>';
} ?>

Прямо сейчас я получаю это:

September 30, 2014, 12:45 am
October 15, 2014, 2:30 am
January 1, 1970, 12:00 am

И то, что я хочу, это:

September 30, 2014, 12:45 am
October 15, 2014, 2:30 am

В конце концов, я также хотел бы сделать его условным, чтобы оно повторяло «TBA», когда нет дат. Я могу беспокоиться об этом позже, когда он заработает, но в тот момент, когда массив пуст, я получаю сообщение об ошибке «Предупреждение: неверный аргумент предоставлен для foreach () …»

Любая помощь будет принята с благодарностью!

2

Решение

Последний результат — это дата-время, равное 0 unix-времени, поскольку у вас есть пустой объект в конце массива. Просто удалите (вытолкните) последний объект, прежде чем конвертировать так:

<?php global $post;
$date = get_post_meta( $post->ID, '_cmb2_date_time', true );
array_pop($date);
foreach ( $date as $item ) {
echo '<p>' . date("F j, Y, g:i a", (int)$item) . '</p>';
} ?>

Затем, чтобы включить функциональность TBA:

<?php global $post;
$date = get_post_meta( $post->ID, '_cmb2_date_time', true );
//If you are still getting an extra object even when there are no dates to be passed
//from get_post_meta then pop before the check if empty
array_pop($date);
if( empty( $date ) )
{
echo '<p>TBA</p>';
}
else
{
//If you are not getting the extra object when empty, only when there are results
//then put the pop here before the foreach loop
foreach ( $date as $item ) {
echo '<p>' . date("F j, Y, g:i a", (int)$item) . '</p>';
}
}
?>
4

Другие решения

date() выведет текущую дату и время, если последний параметр пуст (или эпоха Unix, если 0), поэтому используйте этот код;

foreach ( $date as $item ) {
if($item) echo '<p>' . date("F j, Y, g:i a", (int)$item) . '</p>';
}

Если запись массива пуста, дата не будет отображаться.

Надеюсь это поможет.

0

Измените foreach на

foreach ( $date as $item ) {
echo '<p>'.(empty($item)?"TBA":date("F j, Y, g:i a", (int)$item)).'</p>';
}
0
По вопросам рекламы [email protected]